解题思路:
通过题目描述我们可以知道,用普通的加法是解决不了的,即使采用double也是不可取的。这题是属于高精度加法,高精度常用的算法有加法、减法、乘法、除法。
例如,有两个字符串,str1="123456789",str2="123456",用整型数组num1字符串str1的数字,用num2存储读字符串str2。如下所示。
然后将数组num2的元素加到数组num1,如下图所示。
遍历数组num1,如果num1中的某个元素num[i]大于10,就进入如下操作,num[i]减10,num[i+1]加1。
最后反向输出数组num1即可。
参考代码:
#include <iostream> #include <string> #include <cstring> #define maxn 105 typedef unsigned long ul; using namespace std; int num1[maxn],num2[maxn]; ul add(string str1,string str2){ ul size1 = str1.size(),size2 = str2.size(); for(ul i = 1; i <= size1; i ++){ num1[i] = str1[size1 - i] - 48; } for(ul i = 1; i <= size2; i ++){ num2[i] = str2[size2 - i] - 48; } for(int i = 1; i <= size1; i ++){ num1[i] += num2[i]; } for(int i = 1; i <= size1; i ++){ if(num1[i] >= 10){ num1[i+1] += 1; num1[i] -= 10; } } if(num1[size1+1] > 0){ size1 ++ ; } return size1; } int main(){ string str1,str2; cin >> str1; cin >> str2; ul len; memset(num1,0,sizeof(num1)); memset(num2,0,sizeof(num2)); if(str1.size() >= str2.size()){ len = add(str1,str2); }else{ len = add(str2,str1); } for(int i = 1; i <= len; i ++){ cout << num1[len - i + 1]; } cout << endl; }
0.0分
4 人评分
剪刀石头布 (C语言代码)浏览:748 |
完数 (C语言代码)浏览:685 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:664 |
母牛的故事 (C语言代码)浏览:715 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:673 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:455 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:663 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:809 |
母牛的故事 (C语言代码)浏览:451 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1189 |