大数减法(C++实现)

思路:

和大数加法是一样的,只不过加变成了减。

 

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int L=110;
 6 string sub(string a,string b)//只限两个非负整数相加
 7 {
 8 
 9     string ans;
10     int na[L] = {0};
11     int nb[L] = {0};
12     int la = a.size();
13     int lb = b.size();
14     //倒序存储
15     for (int i=0;i<la;i++)
16     {
17         na[la-1-i] = a[i]-'0';
18     }
19     //倒叙存储
20     for (int i=0;i<lb;i++)
21     {
22         nb[lb-i-1] = b[i]-'0';
23     }
24     int lmax = max(la,lb);
25     //从个位开始相减
26     for (int i=0;i<lmax;i++)
27     {
28         na[i] -= nb[i];
29         while (na[i]<0)
30         {
31             na[i] += 10;
32             na[i+1]--;
33         }
34     }
35     //处理前置0
36     while (!na[lmax])
37         lmax--;
38     if (lmax<0)
39         ans = "0";
40     else {
41         for (int i = lmax; i >= 0; i--)
42             ans += na[i] + '0';
43     }
44     return ans;
45 }
46 int main()
47 {
48     string a,b;
49     while(cin>>a>>b) cout<<sub(a,b)<<endl;
50     return 0;
51 }

 

全部评论

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务