码迷,mamicode.com
首页 > 编程语言 > 详细

利用C++ string实现任意长度小数、整数之间的加法

时间:2017-05-06 01:06:52      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:result   反转   namespace   put   作者   字符串   log   space   trre   

  1 /*
  2 大数的运算1--加法:
  3 利用C++ string实现任意长度小数、整数之间的加法
  4 作者:大大维
  5 2017/5/5
  6 */
  7 #include<iostream>
  8 #include<string>
  9 #include<cctype>
 10 #include<algorithm>
 11 using namespace std;
 12 int main()
 13 {
 14     string num1,num2;
 15     cout<<"Input num1 , num2:"<<endl;
 16     cin>>num1>>num2;
 17     string num11,num12,num21,num22;
 18     //输入检查
 19     int tempCnt=0;
 20     for(auto c:num1)
 21     {
 22         if(!isdigit(c)||num1.empty())
 23         {
 24             if(c==.&&tempCnt!=1)
 25             {
 26                 ++tempCnt;
 27             }
 28             else
 29             {
 30                 cout<<"num1: Please input correct form!!!"<<endl;
 31                 return 0;
 32             }
 33         }
 34     }
 35     tempCnt=0;
 36     for(auto c:num2)
 37     {
 38         if(!isdigit(c)||num2.empty())
 39         {
 40             if(c==.&&tempCnt!=1)
 41             {
 42                 ++tempCnt;
 43             }
 44             else
 45             {
 46                 cout<<"num2: Please input correct form!!!"<<endl;
 47                 return 0;
 48             }
 49         }
 50     }
 51 
 52     //字符串分割(整数部分和小数部分)
 53     int i=0;
 54     while(i!=num1.size()&&num1[i]!=.)
 55     {
 56         num11+=num1[i];
 57         ++i;
 58     }
 59     while(++i!=num1.size())
 60     {
 61         num12+=num1[i];
 62     }
 63     i=0;
 64     while(i!=num2.size()&&num2[i]!=.)
 65     {
 66         num21+=num2[i];
 67         ++i;
 68     }
 69     while(++i!=num2.size())
 70     {
 71         num22+=num2[i];
 72     }
 73     if(num11.empty())
 74         num11+=0;
 75     if(num12.empty())
 76         num12+=0;
 77     if(num21.empty())
 78         num21+=0;
 79     if(num22.empty())
 80         num22+=0;
 81 
 82 
 83     //小数部分计算
 84     string &strLong2=num12,&strShort2=num22;
 85     if(strLong2.size()<strShort2.size())
 86     {
 87         string strTemp=strLong2;
 88         strLong2=strShort2;
 89         strShort2=strTemp;
 90     }
 91     //补0
 92     for(int i=strShort2.size();i<strLong2.size();++i)
 93         strShort2+=0;
 94     //反转字符串
 95     reverse(strLong2.begin(),strLong2.end());
 96     reverse(strShort2.begin(),strShort2.end());
 97     //小数部分进行加法计算
 98     string strRes2(strLong2.size(),0);
 99     int carry=0;//进位
100     for(int i=0;i!=strLong2.size();++i)
101     {
102         int a=strShort2[i]-0,b=strLong2[i]-0;
103         a=a+b+carry;
104         carry=a/10;
105         strRes2[i]=(a%10)+0;
106     }
107     //反转回来
108     reverse(strRes2.begin(),strRes2.end());
109 
110 
111     //整数部分计算
112     //反转字符串
113     string &strLong1=num11,&strShort1=num21;
114     if(strLong1.size()<strShort1.size())
115     {
116         string strTemp=strLong1;
117         strLong1=strShort1;
118         strShort1=strTemp;
119     }
120     reverse(strLong1.begin(),strLong1.end());
121     reverse(strShort1.begin(),strShort1.end());
122 
123 
124     string strRes1(strLong1.size(),0);
125     for(int i=0;i!=strShort1.size();++i)
126     {
127         int a=strShort1[i]-0,b=strLong1[i]-0;
128         a=a+b+carry;
129         carry=a/10;
130         strRes1[i]=(a%10)+0;
131     }
132     for(int i=strShort1.size();i!=strLong1.size();++i)
133     {
134         int b=strLong1[i]-0;
135         b+=carry;
136         carry=b/10;
137         strRes1[i]=b%10+0;
138     }
139     if(carry)
140     {
141         strRes1+=(carry+0);
142     }
143     //反转回来
144     reverse(strRes1.begin(),strRes1.end());
145 
146 
147     //合并整数部分和小数部分
148     string strRes=strRes1+.+strRes2;
149     cout<<"The result = "<<strRes<<endl;
150 }

 

利用C++ string实现任意长度小数、整数之间的加法

标签:result   反转   namespace   put   作者   字符串   log   space   trre   

原文地址:http://www.cnblogs.com/liujw2114/p/6815386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!