c语言任意长度小数加减法,[c++]大数运算( 二 )


119 for(int i=.size(); i
122 (.begin(),.end());123 (.begin(),.end());124 //小数部分进行加法计算
125(.size(),'0');126 int carry=0;//进位
127 for(int i=0; i!=.size(); ++i)128 {129 int a=[i]-'0',b=[i]-'0';130 a=a+b+carry;131 carry=a/10;132 [i]=(a)+'0';133 }134 //反转回来
135 (.begin(),.end());136
137
138 //整数部分计算
139 if(.size()
146 (.begin(),.end());147 (.begin(),.end());148
149
150(.size(),'0');151 for(int i=0; i!=.size(); ++i)152 {153 int a=[i]-'0',b=[i]-'0';154 a=a+b+carry;155 carry=a/10;156 [i]=(a)+'0';157 }158 for(int i=.size(); i!=.size(); ++i)159 {160 int b=[i]-'0';161 b+=carry;162 carry=b/10;163 [i]=b+'0';164 }165 if(carry)166 {167 +=(carry+'0');168 }169 //反转回来
170 (.begin(),.end());171
172
173 //合并整数部分和小数部分
174=+'.'+;175 ;176 }177
178 //减法 被减数的整数部分 被减数的小数部分 减数的整数部分 减数的小数部分
179sub( , , ,)180 {181 //小数部分进行减法计算
182 int =.size()-.size();183 //补0
184 if(=0)209 {210 carry=0;211 [i]=a+'0';212 }213 else
214 {215 carry=1;216 [i]=a+10+'0';217 }218 }219 //反转回来
220 (.begin(),.end());221
222
223
224 //整数部分进行减法计算225 //反转字符串
226 (.begin(),.end());227 (.begin(),.end());228(.size(),'0');229 for(int i=0;i!=.size();++i)230 {231 int a=[i]-'0',b=[i]-'0';232 a=a-b-carry;233 if(a>=0)234 {235 carry=0;236 [i]=a+'0';237 }238 else
239 {240 carry=1;241 [i]=a+10+'0';242 }243 }244 for(int i=.size();i!=.size();++i)245 {246 int a=[i]-'0';247 a=a-carry;248 if(a>=0)249 {250 carry=0;251 [i]=a+'0';252 }253 else
254 {255 carry=1;256 [i]=a+10+'0';257 }258 }259 if(carry)//此时除数比被除数大 , 结果为负数
260 {261"*";262 }263 //反转回来
264 (.begin(),.end());265
266
267 //清楚冗余0
【c语言任意长度小数加减法,[c++]大数运算】268 ;269 =0;270 for(int i=0;[i]=='0';++i)++;271 for(int i=;i!=.size();++i)272 +=[i];273 =;274 //合并整数部分和小数部分
275=+'.'+;276 ;277 }
View Code
四、运行结果截图:
说明1:此处有一定的容错性 , 可以处理(.X或X.型的数据)
说明2:(*)表示结果为负数 , 不再处理
说明3:对输出格式统一控制为小数类型