高精(第一篇)

(高精是什么东西我相信大家都知道,我就不详细说了(不知道的百度))高精其实可以相当于是一个强模拟,它模拟的是一个列竖式计算,总体思想如下:

先读入两个字符串,再把它一个一个分解,分别存入两个数组中,如:

字符串1:123456789123456789

字符串2:987654321987654321

              1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18

数组a:9  8  7  6  5  4  3  2  1  9  8  7  6  5  4  3  2  1  

数组b:1  2  3  4  5  6  7  8  9  1  2  3  4  5  6  7  8  9  

这样就可以将它们的末尾相加,加到c数组中,处理进位并输出,伪代码如下:

#include<bits/stdc++.h>

using namespace std;

int main()

{

  string n,m;

int i,a[1001]={},b[1001]={},c[1001]={},lena,lenb,len,x=0;
cin>>n>>m;   //输入两个字符串
lena=n.size();
lenb=m.size();
for(i=0;i<lena;i++) a[lena-i]=n[i]-'0';
for(i=0;i<lenb;i++) b[lenb-i]=m[i]-'0';//将字符串的末位移动到首位,容易处理加减。这里要特别注意的是c++的数组是从'0'开始的,所以循环要从零开始
if(lena>lenb) len=lena;else len=lenb;//选择字符串长度较大的相加
for(i=1;i<=len;i++) 
{
c[i]=a[i]+b[i]+x;
x=c[i]/10;
c[i]=c[i]%10;
}

        //两数相加,并处理进位
if(x>0) 

        {

            len++;

            c[len]++;

        }

        //如果还有首位有进位未处理,就在首位+1
for(i=len;i>=1;i--) cout<<c[i];//输出
return 0;
}


猜你喜欢

转载自blog.csdn.net/chenkainan1023/article/details/78727621
今日推荐