共计 3906 个字符,预计需要花费 10 分钟才能阅读完成。
大数相加(如 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;
//}
正文完