飞道的博客

C++——大数加法

165人阅读  评论(0)

大数加法:即运算的数据可能很大,int、long、long long无法存放,存在字符串中,但是加法的运算规则还是10进制。

对于两个字符串,首先判断两者的长度,我们将字符串s设置为较长的字符串,方便后面的运算(也可以将t设置为较长的)。

从低位开始逐字符取出转换为整数num1和num2,当较短的已经取完则置num2为0;然后进行加法运算(记得加上进位flag),运算过程中用flag表示是否存在进位,结果对10求整就是进位结果,对10取余得到当前位置的结果,赋值给s当前位置,直到运算完毕。

最后需要注意的是,最高位是否存在进位,即判断循环结束后的flag值,若是等于1,则产生进位,在运算结果字符串s前拼接一个1即可,最后返回s即为所求结果。

(PS:对于其他进制的运算方法一样,只需要将标志位的计算方式变一下就行,比如8进制,则对8进行求整得到进位结果,取余就是当前位置的结果。)

 


  
  1. class Solution {
  2. public:
  3. /**
  4. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
  5. * 计算两个数之和
  6. * @param s string字符串 表示第一个整数
  7. * @param t string字符串 表示第二个整数
  8. * @return string字符串
  9. */
  10. string solve(string s, string t) {
  11. // write code here
  12. if(s.size()<t.size())
  13. {
  14. string temp=s;
  15. s=t;
  16. t=temp;
  17. }
  18. int len1=s.size();
  19. int len2=t.size();
  20. int num1,num2,flag= 0,sum;
  21. while(len1> 0)
  22. {
  23. num1=s[len1 -1]- '0';
  24. if(len2> 0)
  25. num2=t[len2 -1]- '0';
  26. else
  27. num2= 0;
  28. sum=num1+num2+flag;
  29. s[len1 -1]=sum% 10+ '0';
  30. flag=sum/ 10;
  31. len1--;
  32. len2--;
  33. }
  34. if(flag== 1)
  35. s= "1"+s;
  36. return s;
  37. }
  38. };

 


转载:https://blog.csdn.net/ldm_666/article/details/116609610
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场