C++临走前奉献:大数加法
来源:百度知道 编辑:UC知道 时间:2024/05/05 19:09:43
输入至多100行的文本,每行是一个至多100位的十进制无符号大整数,最后的输入行为零。要求计算出这些大整数的和,并以十进制方式显示。
示例输入:
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
示例输出:
370370367037037036703703703670
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
const int n = 100;// 数字的最大位数
const int b = 10; // 数字的进制
char r[n+1] = {0};// 加数
char s[n+1] = {0};// 求和
while (scanf("%s", r) && strcmp(r, "0")) { // 对每一个加数...
for (int i = strlen(r)-1, j = n-1; i >= 0; i--, j--) { // 中的每一个数字位
r[i] -= '0'; // char -> int
for (int k = j, c = 0; 1; k--) { // update s
const int sum = (!c ? r[i] : 0) + s[k] + c; // local sum
if ((c = sum > b - 1)) s[k] = sum - b; // do update
else { s[k] = sum; break; } // e
示例输入:
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
示例输出:
370370367037037036703703703670
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
const int n = 100;// 数字的最大位数
const int b = 10; // 数字的进制
char r[n+1] = {0};// 加数
char s[n+1] = {0};// 求和
while (scanf("%s", r) && strcmp(r, "0")) { // 对每一个加数...
for (int i = strlen(r)-1, j = n-1; i >= 0; i--, j--) { // 中的每一个数字位
r[i] -= '0'; // char -> int
for (int k = j, c = 0; 1; k--) { // update s
const int sum = (!c ? r[i] : 0) + s[k] + c; // local sum
if ((c = sum > b - 1)) s[k] = sum - b; // do update
else { s[k] = sum; break; } // e
大数加法?
记得回来给分啊,我这么支持你。
正好还收藏了呵呵。
李彦宏:干什么?????这么热闹
行了 我全看见了
。。。。。。。。。收藏了
天呐..
我不会!