sum.rar

  • PUDN用户
    了解作者
  • C++
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 2
    下载次数
  • 2009-07-04 09:51
    上传日期
这是一个可以完成高精度数的相加的程序!可以对任意长度的,是否带符号的数进行相加操作!
sum.rar
  • sum.cpp
    4.1KB
内容介绍
#include<fstream> #include<iostream> #include<deque> using namespace std; void simple(deque<int> &a) { int len = a.size(); int i=0; while(1) { //把第一个不为0的数的前面的数都删掉 if(a.front()==0 && a.size() != 1 ) a.pop_front(); else break; } } deque<int> test_abs(deque<int> a , deque<int> b , deque<int> &q, int &equal) //找到绝对值大的数,p表示绝对值大的数,q表示绝对值小的 { int len_a,len_b,i; len_a = a.size(); //计算a,b的长度 len_b = b.size(); equal = 0; if( len_a != len_b){ //如果a,b长度不同,则长度大的为绝对值大的 if(len_a > len_b){ q = b; return a; } else{ q = a; return b; } } else{ //如果a,b长度不同,则从最高位开始,高位较大的为较大的数 for(i = 0 ; i<len_a ; i++ ){ if( a[i] > b[i]){ q = b; return a; } if( a[i] < b[i]){ q = a; return b; } } } q = b; equal = 1; //如果两数相等,置equal为1 return a; } void sub( deque<int> a, deque<int> b) { int len_l,len_s,i,carry=0,dif,equal; deque<int> c, p,q; simple(a) ; simple(b) ; p = test_abs(a,b,q,equal); if(equal==1){ cout<<0; return; } len_l = p.size(); len_s = q.size(); if ( p.size() != q.size()) for(i =q.size(); i < p.size() ; i++) q.push_front(0); for(i=len_l-1 ; i >= 0 ; i--) { if(p[i] < (q[i] + carry) ) { dif= 10 + p[i] - q[i] - carry; carry = 1 ; } else{ dif = p[i] - q[i] - carry; carry = 0; } c.push_front(dif); } simple(c); for(i = 0 ; i < c.size(); i++) cout<<c[i]; } void sum ( deque<int> a, deque<int> b) { int len_l,len_s,i,carry=0,sum,equal; deque<int> c,p,q; simple(a) ; simple(b) ; p = test_abs(a,b,q,equal); if(equal==1){ cout<<0; return; } len_l = p.size(); len_s = q.size(); for(i =len_s; i < len_l ; i++) q.push_front(0); for(i=len_l-1 ; i >= 0 ; i--) { sum = (p[i] + q[i] + carry) %10; carry = (p[i] + q[i] + carry) /10; c.push_front(sum); } if( carry != 0 ) c.push_front(carry); simple(c) ; for(i=0 ; i < c.size(); i++) cout<<c[i]; } int main() { freopen ("sum.in","r",stdin); freopen ("sum.out","w",stdout); deque<int> Qa,Qb,p; int in_num,flag1,flag2,equal,i; cin.unsetf(ios::skipws); //设置不跳过回车符 char temp; cin>>temp; //标记数1为正数还是负数 if(temp == '-') flag1 = 1; else { flag1 = 0; if(temp != '+') Qa.push_back(temp-48); } while(1){ //保存数1到Qa cin >> temp; if(temp == '\n') break; in_num=temp-48; Qa.push_back(in_num); } cin>>temp; //标记数1为正数还是负数 if(temp == '-') flag2 = 1; else { flag2 = 0; if(temp != '+') Qb.push_back(temp-48); } while(1){ //保存数2到Qb cin >> temp; if( feof(stdin) || temp == '\n' ) break; in_num=temp-48; Qb.push_back(in_num); } simple(Qa); //去掉两数中前面多余的0 simple(Qb); if(flag1== flag2){ //如果两数符号相同,就用加法计算,如果为负数,就输出“-" if (flag1==1) cout<<"-"; sum(Qa,Qb); } else{ //如果两数符号不同 test_abs(Qa,Qb,p,equal); if( ((p == Qa && flag2 == 1) || (p == Qb && flag1 == 1)) && equal == 0) //两数绝对值不等时,以较大的符号为结果符号 cout<<"-"; sub(Qa,Qb); } fclose(stdin); //关闭文件 fclose(stdout); //关闭文件 return 0; }
评论
    相关推荐
    • sum.rar
      register unsigned sum Device Driver for linux v2.13.6.
    • sum.rar
      试利用do…while 循环,计算1!+2!+…+100!的总和.
    • SUM.rar
      SUM Of Numbers Sum Of Numbers
    • Sum.rar
      用VC++求程序等的实际运行时间,有计算微小时间的代码。
    • HashSum-开源
      HashSum是GNU的md5sum和sha1sum的.NET端口。 它支持:在MD5和SHA1之间选择哈希算法(以后可以添加更多),以及HashSum和GNU校验和文件格式之间的兼容性。
    • right_sum
      right_sum python main.py --rows 9 --cols 9 --target 65
    • 2sumleetcode-leetcode:leetcode
      2sum leetcode leetcode 方法 哈希: 2Sum->3Sum(hash) 2Sum Less Than K->3Sum Closet->3Sum Smaller(两个指针接近) 找到重复的号码 两个指针: 链表循环 BF: DP: 数学: i^0=i;i^i=0 单号->单号2->单号3 n&n...
    • SumTotal Intelligent Assistant-crx插件
      SumTotal Intelligent Assistant(SIA):直接从浏览器搜索SumTotal Learn培训。 使用SumTotal Intelligent Assistant(SIA)浏览器扩展轻松连接到您的培训! 在强大的SumTotal学习管理的支持下,SIA可以帮助用户...
    • array_sum.rar
      a program to sum array elements
    • Simple Sum.rar
      This is just a simple sum.