大数相加(如911111111111111111111111这种数)

//#include<iostream>//#include<algorithm>//#include<string>//#include<string.h>//#include<cstdio>//#include<queue>//#include<stack> //#include<set>//#include<map> //#include<vector> //using namespace std;//struct node{//    int number[1005];//    int len;//}a,b,ans;//a代表第一个大数,b代表第二个大数,ans代表要求得大数的和//char s[1005];//定义一个字符数组(相当于一个字符串(\0结尾)) //int main(){//    int i =0;//    scanf("%s",s);//把每个数字当做字符串输出 //    a.len = (int)strlen(s);//    memset(a.number,0,sizeof(a.number));//    for(i = 0; i < a.len; i++){//        a.number[i] = s[a.len - i - 1] - '0';//将数组倒位赋值给a.number列竖式相加(个位放后面作为第一个,前面顺次倒序) //    }  //    scanf("%s",s);//    b.len = (int)strlen(s);//    memset(b.number,0,sizeof(b.number));//    for(i = 0; i < b.len; i++){//        b.number[i] = s[b.len - i - 1] - '0';//将数组倒位赋值给b.number列竖式相加(个位放后面作为第一个,前面顺次倒序) //    }//    memset(ans.number,0,sizeof(ans.number));//    for(i = 0; i < max(a.len,b.len); i++){//        ans.number[i] = a.number[i] + b.number[i];//倒位相加:将数a.number与b.number列竖式相加(个位放后面作为第一个,前面顺次倒序相加) //    }//    for(i = 0; i < max(a.len,b.len) || ans.number[i]; i++){//如果呈现相加后后果>=10,须要进位//    // ans.number[i]条件是当最初一位>= 10依然须要向后进一位时,此时i不满足< max(a.len,b.len)//    //则用该条件让i++能够继续执行一遍,以便前面输入时不会少一位(仍放弃len-1为最初一位) //    //只有最初一位%10 != 0,(如最初一位11 % 10 = 1) //        if(ans.number[i] >= 10){//            ans.number[i + 1] += ans.number[i] / 10;//原本应该向前进位,当初倒位,故i向i + 1处进位,进的数是num[i]/10的后果,如num[i] = 17时,需向i+1位进17/10 = 1 //            ans.number[i] %= 10;//进完位后num[i]自身也只剩下其个位,如17向后退1,而后本人变成7//        }//    } //    ans.len = i;//    for(i = ans.len - 1; i >= 0; i--){//        printf("%d",ans.number[i]);//因为是倒位相加,所以倒序输入 //    }//    printf("\n");//    return 0; //} 

大数比拟(如911111111111111111111111这种数)

//#include<iostream>//#include<algorithm>//#include<string>//#include<string.h>//#include<cstdio>//#include<queue>//#include<stack> //#include<set>//#include<map> //#include<vector> //using namespace std;//struct node{//    int number[1005];//    int len;//}a,b;//a代表第一个大数,b代表第二个大数,ans代表要求得大数的和//char s[1005];//定义一个字符数组(相当于一个字符串(\0结尾))//void Dcompare(node x,node y){//    if(x.len != y.len){//        if(x.len){//            printf("a>b\n");//        }else{//            printf("a<b\n");//        }//        return;//失去后果后返回,函数完结//    }//    for(int i = x.len - 1; i >= 0; i--){//        if(x.number[i] != y.number[i]){//            if(x.number[i] > y.number[i]){//                printf("a>b\n");//            }else{//                printf("a<b\n");//            }//            return;//失去后果后返回,函数完结        //        }    //    }//    printf("a=b\n");//循环未返回后果,阐明for循环条件都不满足 //}     //int main(){//    scanf("%s",s);//把每个数字当做字符串输出 //    a.len = (int)strlen(s);//    memset(a.number,0,sizeof(a.number));//    for(int i = 0; i < a.len; i++){//        a.number[i] = s[a.len - i - 1] - '0';//将数组倒位赋值给a.number列竖式相加(个位放后面作为第一个,前面顺次倒序) //    } //    scanf("%s",s);//    b.len = (int)strlen(s);//    memset(b.number,0,sizeof(b.number));//    for(int i = 0; i < b.len; i++){//        b.number[i] = s[b.len - i - 1] - '0';//将数组倒位赋值给a.number列竖式相加(个位放后面作为第一个,前面顺次倒序) //    }//    Dcompare(a,b);//    return 0;//} 

大数相除(如911111111111111111111111这种数)

//#include<iostream>//#include<algorithm>//#include<string>//#include<string.h>//#include<cstdio>//#include<queue>//#include<stack> //#include<set>//#include<map> //#include<vector> //using namespace std;//struct node{//    int number[1005];//    int len;//}a,ans;//a代表第一个大数,b代表第二个数(被除数),ans代表要求得大数的和//char s[1005];//定义一个字符数组(相当于一个字符串(\0结尾)) //int main(){//    int i = 0,b = 0;//    scanf("%s",s);//把比拟大的那个数字当做字符串输出 //    a.len = (int)strlen(s);//    memset(a.number,0,sizeof(a.number));//    for(i = 0; i < a.len; i++){//        a.number[i] = s[a.len - i - 1] - '0';//将数组倒位赋值给a.number(个位放后面作为第一个,前面顺次倒序)//    }  //    scanf("%d",&b);//把被除数输出进去 //    memset(ans.number,0,sizeof(ans.number));//    ans.len = 1;//    for(i = a.len - 1; i >= 0; i--){//大数相除是把除数倒过去写,然而是从前面的数开始进行 除数/被除数 操作 //        if(i != 0){//因为上面有i - 1操作 //            a.number[i - 1] += a.number[i] % b * 10;//前面的数对被除数取余的余数*10加到后面一个数外面,从后往前顺次取余加//            //留神此处是更新的a.number的值,不是ans.number[]的值,大数除法是不断更新原字符串(a)的各字符的值 ////            cout << ans.number[i -  1];//        }  //        ans.number[i] = a.number[i]/b;//把以后 字符数/b 失去的整数存在ans数组里//        if(ans.number[i]&&ans.len == 1){//当ans.number[i](即a.number[a.len - 1](即最初一个字符数)第一次进行/被除数b的值)不整除b,//        //a.number[i]/b整除的话ans.number[a.len - 1](即最初一个)是0,因为前面也要倒序输入,所以不必输入这个结尾的0 //            ans.len = i + 1; //此运算只能进行顺次,ans.len初始为1,进行一次后就不在满足下面的ans.len == 1且间接失去后续要输入的ans数组的长度 //        }    //    }//    for(i = ans.len - 1; i >= 0; i--){//        printf("%d",ans.number[i]);//因为是倒位相加,所以倒序输入 //    }//    printf("\n");//    printf("%d\n",a.number[0] % b);//输入第0位(也是最初一次运算)失去的最终余数 //    return 0; //}