华为机试题—大数相减-c++
2016-07-08 20:52
676 查看
/*题目:输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结
/果。
/大数一般会超出长整型的范围,所以用字符串存储数据然后按照减法运算法则实现就成了。
/string类成员函数功能强大!
*/
/果。
/大数一般会超出长整型的范围,所以用字符串存储数据然后按照减法运算法则实现就成了。
/string类成员函数功能强大!
*/
#include <iostream> #include<string> using namespace std; int compare(string &num1,string &num2) { int l1 = num1.size(); int l2 = num2.size(); if(l1>l2) return 1; else if(l1<l2) return 2; else for(int i=0;i<l1;i++) { if(num1[i]>num2[i]) return 1; else if(num1[i]<num2[i]) return 2; } return 0; } string minus(string &num1,string &num2) { //num1>nun2 int len1= num1.size(); int len2= num2.size(); int flag = 0; int temp=0; string result; for(int i=0;i<len2;i++) { temp=num1[len1-1-i]-num2[len2-1-i]-flag; if(temp<0){ flag=1; temp = temp+10; result.push_back(temp+'0'); } else { flag=0; result.push_back(temp+'0'); } } for(int i=len1-len2-1;i>=0;i--) { temp = num1[i]-'0'-flag; if(temp<0) { flag =1; result.push_back(temp+10+'0'); } else { flag=0; result.push_back(temp+'0'); } } int len3 = result.size(); int num=0; for(int i=0;i<len3;i++) if(result[i]==0) num++; else break; if(num>0) result.erase(len3-num); num = result.size(); char c; for(int i=0;i<num/2;i++) { c = result[i]; result[i]=result[num-1-i]; result[num-1-i] = c; } return result; } void main() { string num1,num2; cin>>num1>>num2; int flag=0; string result; flag = compare(num1,num2); if(flag==0) { result='0'; } if(flag==1) result = minus(num1,num2); if(flag==2){ result.push_back('-'); result.append(minus(num2,num1)); } cout<<result; return ; }
相关文章推荐
- 两个非常大的数字相加,相减(JAVA)
- 大数的快速求余算法
- 大数相减
- [LightOJ-1214][Java] Large Division
- Round C APAC Test 2016
- 学习笔记 C++ 链表
- 【C++11】新特性——引入nullprt
- 1097. Deduplication on a Linked List (25)(段错误)
- c++ String 类函数详解
- C++临时变量的生命周期
- 学习ACM之路-大数的幂运算
- 个人记事本
- C++ primer (2) —— 基础
- C++内存分布之菱形继承(无虚函数)
- C++ primer plus笔记整理 03
- C++之函数fgetc和fputc、fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
- 《C++ Primer Plus》第10章 对象和类 学习笔记
- 《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记
- 《C++ Primer Plus》10.2 抽象和类 学习笔记
- C++说明符和限定符