概述
输入:输入的第一行为一个整数N,表示有N组数据。每组数据最多包含100行。每行由一个非常长的十进制整数组成,该整数的长度不会超过100个字符而且只包含数字,每组的数据的最后一行为0,表示这组数据结束。每组数据之间有一个空行。
输出:对于输入的每组数据,输出它们的和。每两组数据的输入之间有一个空行。
分析:
本题对每一位进行求和的时候,可以采用字符形式,也可以采用整数形式。
但是根据经验......用整数处理起来更方便哦。
需要注意以下两点:
1、每一位计算和的时候,得到的进位可能大于1。
2、累加各大数得到的和,其位数可能会比参与运算的大数的位数还要多。
因为参加求和运算的大数的个数不会超过100个,因此如果参与求和运算的大数的最大长度为maxlen,那么求和结果长度不会超过maxlen+2。那么求和的时候只需要一直求和到maxlen+2位,然后去掉后面的0,再以相反的顺序输出各位整数就行啦。
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
char buffer[200];//以字符形式存储读入的每一个整数
int array[200][200];//逆序后的大数以及求得的和
int answer[200];
int i,j,k;
int num_integers;//读入的整数的个数
int len,maxlen;//每个整数的长度以及这些整数的最大长度
int sum,carry,digit;//每位求和运算后得到的总和、进位以及该位的结果
int N;
scanf("%d", &N);
for(k = 1; k <= N; k++)
{
maxlen = -1;
memset(array, 0, sizeof(array));
memset(answer, 0, sizeof(answer));
for(num_integers = 0; num_integers < 200; num_integers++)
{
gets(buffer);
if(strcmp(buffer, "0") == 0)
break;
len = strlen(buffer);
if(len > maxlen)
maxlen = len;
for(i = 0; i < len; i++)
{
array[num_integers][i] = buffer[len - 1 - i] - '0';//逆序存放大数的每位(整数形式)
}
}
carry = 0;
for(i = 0; i < maxlen + 2; i++)
{
sum = carry;
for(j = 0; j < num_integers; j++)
sum += array[j][i];
digit = sum % 10;
carry = sum / 10;
answer[i] = digit;
}
for(i = maxlen + 2; i >= 0; i--)
{
if(answer[i] != 0)
break;
}
while(i >= 0)
printf("%d",answer[i--]);
printf("n");
if(k < N)
printf("n");
}
return 0;
}
最后
以上就是彩色手套为你收集整理的十进制大数的加法运算的全部内容,希望文章能够帮你解决十进制大数的加法运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复