题目名称:c++难题-大数加法
时间限制:1000ms内存限制:256M
题目描述
大数一直是一个c语言的一个难题。 现在我们需要你手动模拟出大数加法过程。 请你给出两个大整数加法结果。
输入描述:
第一行输入整数n,第二行输入整数m。 (1<=number<=1e100)
输出描述:
输出两数加和。
示例
示例1
输入
3
2
输出
5
思路:由于这个数可能超级大,我们就不能用简单的相加来解决了,因此我考虑每个位都占一列,存储在一个超大的数组里,然后取出来逐步相加,得到最终结果。
所需关键变量:
num1[5105]用来存储第一个加数
num1[5105]用来存储第二个加数
sum[5105]用来存储最终结果
只要我们发现该位两数相加大于或等于10,我们就向前进一,然后把对十求余所得到的数赋值给该位。
该算法本人认为比较优,如果有更好的想法,欢迎q我!
代码如下(编译器是dev,语言是C语言):
#include <stdio.h>
#include<stdbool.h>
int control = 0,num1jishu = 1,num2jishu = 1,i,j;
char temp;
int num1[5105] = {0},num2[5105] = {0},sum[5105] = {0};
int main(){
while(true){
scanf("%c",&temp);
if(temp == '\n'){
control++;
if(control == 2){
break;
}
continue;
}
if(control == 0){
num1[num1jishu++] = temp - 48;
}else{
num2[num2jishu++] = temp - 48;
}
}
i = --num1jishu;
j = --num2jishu;
if(i>=j){
for(;i>0;i--){
if(j == 0){
sum[i] = sum[i] + num1[i];
if(sum[i]>=10){
sum[i-1] += 1;
sum[i] = sum[i]%10;
}
}else{
sum[i] = sum[i] + num1[i] +num2[j--];
if(sum[i]>=10){
sum[i-1] += 1;
sum[i] = sum[i]%10;
}
}
}
for(i = 0;i<=num1jishu;i++){
if((i == 0)&&(sum[i] == 0)){
continue;
}
printf("%d",sum[i]);
}
}else{
for(;j>0;j--){
if(i == 0){
sum[j] = sum[j] + num2[j];
if(sum[j]>=10){
sum[j-1] += 1;
sum[j] = sum[j]%10;
}
}else{
sum[j] = sum[j] + num1[i--] +num2[j];
if(sum[j]>=10){
sum[j-1] += 1;
sum[j] = sum[j]%10;
}
}
}
for(i = 0;i<=num2jishu;i++){
if((i == 0)&&(sum[i] == 0)){
continue;
}
printf("%d",sum[i]);
}
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)