问题标题: Spear Os 0.0.0

0
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;
}

 


0
0
我要回答