0
已解决
李承耀
新手光能
新手光能
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
string tostr(int i){
string s="";
while(i){
s=char(i%10+'0')+s;
i/=10;
}
return "加载进度%"+s;
}
string chen(string s1,string s2){
int a[1005]={0},b[1005]={0},c[2005]={0};
a[0]=s1.size();
b[0]=s2.size();
c[0]=a[0]+b[0];
for(int i=1;i<=a[0];i++){
a[i]=s1[a[0]-i]-48;
}
for(int i=1;i<=b[0];i++){
b[i]=s2[b[0]-i]-48;
}
for(int i=1;i<=a[0];i++){
for(int j=1;j<=b[0];j++){
c[i+j-1]+=a[i]*b[j];
}
}
for(int i=1;i<=c[0];i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[0]>1 &&c[c[0]]==0)c[0]--;
string to="";
for(int i=c[0];i>=1;i--){
to+=char(c[i]+48);
}
return to;
}
int setup(){
MessageBox(NULL,"正在加载spear os","Startup",MB_OK);
int i=1;
srand(time(NULL));
while(i<=100){
cout<<tostr(i).c_str();
i+=rand()%15+0;
Sleep(200);
system("cls");
}
if(i!=100)cout<<tostr(100);
Sleep(200);
}
string add(string s1,string s2){
int a[100005]={0},b[100005]={0},c[100005]={0};
a[0]=s1.size();
b[0]=s2.size();
c[0]=max(a[0],b[0]);
for(int i=1;i<=a[0];i++){
a[i]=s1[a[0]-i]-48;
}
for(int i=1;i<=b[0];i++){
b[i]=s2[b[0]-i]-48;
}
int jw=0;//进位
for(int i=1;i<=c[0];i++){
c[i]=a[i]+b[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
if(jw){
c[0]++;
c[c[0]]=jw;
}
string to="";
for(int i=c[0];i>=1;i--){
to+=char(c[i]+48);
}
return to;
}
string sub(string s1,string s2){
int a[10005]={0},b[10005]={0},c[10005]={0};
a[0]=s1.size();
b[0]=s2.size();
c[0]=max(a[0],b[0]);
for(int i=1;i<=a[0];i++){
a[i]=s1[a[0]-i]-48;
}
for(int i=1;i<=b[0];i++){
b[i]=s2[b[0]-i]-48;
}
for(int i=1;i<=c[0];i++){
if(a[i]<b[i]){
a[i]+=10;
a[i+1]--;
}
c[i]=a[i]-b[i];
}
while(c[0]>1 &&c[c[0]]==0)c[0]--;
string to="";
for(int i=c[0];i>=1;i--){
to+=char(c[i]+48);
}
return to;
}
int compare(int a[], int b[]) {
//索引为0的数据为数组长度
if (a[0]>b[0]) {
return 1;
} else if (a[0]<b[0]) {
return -1;
}
//逐位比较
for (int i=a[0]; i>0; i--) {
if (a[i]>b[i]) {
return 1;
} else if (a[i]<b[i]) {
return -1;
}
}
return 0;
}
void numcpy(int a[],int b[],int dest) {
//将数组右移,使两个数组右端对齐,形参q数组储存右移后的结果
for (int i=1;i<=a[0];i++) {
b[i+dest-1] =a[i];
}
b[0] = a[0]+dest-1;
}
int chu(char s1[1005],char s2[1005]) {
const int MAXN = 1000+4; //根据题目的最大值。+4为了防止A+B出现进位
int tmp[MAXN] = {};//交换用字符串
int a[MAXN] = {};//存储加数A
int b[MAXN] = {};//存储加数B
int c[MAXN] = {};//存储和B
//处理负数
bool flaga = false;//乘数a的符号
if ('-'==s1[0]) {
flaga = true;
strcpy(s1, &s1[1]);//删除负号
}
bool flagb = false;//乘数b的符号
if ('-'==s2[0]) {
flagb = true;
strcpy(s2, &s2[1]);//删除负号
}
//处理输出的负号
if (true==flaga && false==flagb) {
//商为负数
printf("-");
}
//处理乘数1
int len = strlen(s1);
a[0] = len;
for (int i=0; i<len; i++) {
a[len-i]=s1[i]-'0';
}
//处理乘数2
len = strlen(s2);
b[0] = len;
for (int i=0; i<len; i++) {
b[len-i]=s2[i]-'0';
}
if (0==compare(a,b)) {
//两数相等
printf("1\n0\n");
return 0;
} else if (-1==compare(a,b)) {
//被除数小,除数大
printf("0\n");//输出除数
if (true==flaga) {
printf("-");
}
printf("%s\n", s1);
return 0;
} else {
c[0] = a[0]-b[0]+1;
for (int i=c[0]; i>0; i--) {
memset(tmp, 0, sizeof(tmp));
//高位对齐
numcpy(b,tmp,i);
//
while (compare(a, tmp)>=0) {
c[i]++;
//减法
for (int j=1; j<=a[0]; j++) {
if (a[j]<tmp[j]) {
a[j+1]--;
a[j]+=10;
}
a[j]-=tmp[j];
}
int k=a[0];
while (a[k]==0) {
k--;
}
a[0]=k;
}
}
//控制最高位的0
while (c[0]>0 && c[c[0]]==0) {
c[0]--;
}
}
//逆序打印输出商和余数
for (int i=c[0]; i>0; i--) {
printf("%d", c[i]);
}
printf("\n");
if (0==a[0]) {
printf("0\n");
} else {
if (true==flaga) {
printf("-");
}
for (int i=a[0]; i>0; i--) {
printf("%d", a[i]);
}
printf("\n");
}
return 0;
}
int main(){
setup();
pro:
MessageBox(NULL,"欢迎使用Spear os!","SYSTEM",MB_OK);
system("cls");
cout<<"1.附件";
string n;
cin>>n;
system("cls");
if(n=="1"||n=="附件"){
string poop;
cout<<"1.计算器(整数)\n2.版本号";
cin>>poop;
system("cls");
if(poop=="1"||poop=="计算器"||poop=="计算器(整数)"){
MessageBox(NULL,"1.加法2.减法3.乘法4.除法","calc",MB_OK);
string o;
cin>>o;
string a,b;
MessageBox(NULL,"请输入两个数:","calc",MB_OK);
cin>>a>>b;
if(a<b)swap(a,b);
if(o=="1"||o=="加法"){
cout<<add(a,b);
}
else if(o=="2"||o=="减法"){
cout<<sub(a,b);
}
else if(o=="3"||o=="乘法"){
cout<<chen(a,b);
}
else if(o=="4"||o=="除法"){
cout<<chu((char*)a.c_str(),(char*)b.c_str());
}
else{
cout<<"error";
}
Sleep(5000);
}
else if(poop=="2"||poop=="版本号"){
cout<<"spear os 0.0.0 Build 1\n";
Sleep(5000);
}
else{
cout<<"error";
Sleep(5000);
}
}
else{
cout<<"error";
Sleep(5000);
}
goto pro;
}