问题标题: 如何实现高精度连加?(没有题号,酷町豆不少)

0
0
已解决
赵逸凡
赵逸凡
初级启示者
初级启示者
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[500004],b[500010];
string w;
int he;
void Plus(string s1,string s2)
{
	he=0;
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	w="";
	a[0]=s1.length(); 
    for(int i=1;i<=a[0];i++) a[i]=s1[a[0]-i]-'0';
    b[0]=s2.length(); 
    for(int i=1;i<=b[0];i++) b[i]=s2[b[0]-i]-'0'; 
    he=(a[0]>b[0]?a[0]:b[0]); 
    for(int i=1;i<=he;i++) 
    { 
        a[i]+=b[i]; 
        a[i+1]+=a[i]/10;
        a[i]%=10; 
    } 
    he++; 
    while(a[he]==0&&he>1) he--; 
    for(int i=he;i>=1;i--)
    	w[he-i+1]=a[i]+'0';
}
int main()
{
	string a1,b2;
	cin>>a1;
	b2=a1;
	while(cin>>a1)
    {
    	if(a1!="*")
    	{
    		he=0;
			memset(a,0,sizeof(a));
			memset(b,0,sizeof(b));
			w="";
    	}	
		if(a1=="*")
    		break;
    	Plus(a1,b2);
		for(int i=1;i<=he;i++)
    		b2[i-1]=w[i];
	}
	for(int i=0;i<he;i++)
		cout<<b2[i];
    return 0;
}

我的代码是这样,请帮我改正或给出正解

假设题目是连续输入long long类型的数,以“*”为结束,输出这些数的总和(高精度)

回答正确者考虑奖励10酷町豆~50酷町豆不等,可能更多(前提是回答要早于2月28日24时)

赵逸凡在2020-02-24 21:55:02追加了内容

快点啊

赵逸凡在2020-02-24 21:57:01追加了内容

急需

赵逸凡在2020-02-24 21:58:26追加了内容

不是考试题也不是作业,是我自己出的题,不接受“不会”“呵呵”之类的回答,会给予警告


0
已采纳
刘奕然
刘奕然
初级守护
初级守护
main():

cin>>sa;
    while(cin>>sb)
    {
        if(sb=="*")    break;
    for(int i=sa.size()-1;i>=0;i--)
        a[sa.size()-i]=sa[i]-'0';
    for(int i=sb.size()-1;i>=0;i--)
        b[sb.size()-i]=sb[i]-'0';
    la=sa.size();
    lb=sb.size();
    lc=max(la,lb)+1;
    for(int i=1;i<=lc;i++)
    {
        c[i]=(a[i]+b[i]+x)%10;
        x=(a[i]+b[i]+x)/10;
    }
    if(!c[lc])
        lc--;
    for(int i=lc;i>=1;i--)
        sc=sc+char(c[i]+'0');
    sa=sc;
    sc="";
    } 
    for(int i=lc;i>=1;i--)
        cout<<c[i];
    return 0;



Variable definition:

int a[1010],b[1010],c[1010],la,lb,lc,x;
string sa,sb,sc;

(outside the main())

 

刘奕然在2020-02-24 22:10:27追加了内容

正解,已测试通过

0
潘晨皓
潘晨皓
高级天翼
高级天翼

{

 

        如果(sb=="*")    break;

 

    循环(int i=sa.size()-1;i>=0;i--)

 

        a[sa.size()-i]=sa[i]-'0';

 

    循环(int i=sb.size()-1;i>=0;i--)

 

        b[sb.size()-i]=sb[i]-'0';

 

    la=sa.size();

 

    lb=sb.size();

 

    lc=max(la,lb)+1;

 

    循环(int i=1;i<=lc;i++)

 

    {

 

        c[i]=(a[i]+b[i]+x)%10;

 

        x=(a[i]+b[i]+x)/10;

 

    }

 

    如果(!c[lc])

 

        lc--;

 

    循环(int i=lc;i>=1;i--)

 

        sc=sc+char(c[i]+'0');

 

    sa=sc;

 

    sc="";

 

    } 

0
李泽远
李泽远
高级天翼
高级天翼

你这程序哪错了?我试了几个样例,没毛病呀。

0
我要回答