高精度基础之加法

    xiaoxiao2021-03-25  101

    //模板: #include<cstdio> #include<cstring> using namespace std; struct sd { int lend,d[300]; //长度,存数字的数组 sd(){memset(d,0,sizeof(d));}//初始化操作,清零 //引入一个数与结构体内的数相加 //const表示常数,&x表示传入地址 //如果写成sd x传入这个数就太大了,而且容易被改变 sd operator + (const sd &x) const { sd c;//求和器 int t=lend>x.lend?lend:x.lend; //取两个数中最长的 c.d[0]=0; for (int i=0;i<t;i++) { c.d[i]=c.d[i]+d[i]+x.d[i]; c.d[i+1]=c.d[i]/10; //如果进位了,(因为是倒序存入),后一个数初值先赋1,以后便在1的基础上累加 c.d[i]=c.d[i] % 10;//当前位的值 } c.lend=t; if (c.d[t]>0) c.lend++;//如果最高位进位了,长度加1 return c; } }; // < set map vector sd readit() { sd c;char st[300]; scanf("%s",st);int j=0; for (int i=strlen(st)-1;i>=0;i--)//倒序读入 { c.d[j]=st[i]-48;j++; //记得边倒序读入边转化字符为数字 } c.lend=j; //记录长度 return c; } int main() { sd a,b,c; a=readit();b=readit(); c=a+b; for (int i=c.lend-1;i>=0;i--) printf("%d",c.d[i]); printf("\n"); return 0; }

    核心: 结构体,运算符重载,倒序存入

    转载请注明原文地址: https://ju.6miu.com/read-18120.html

    最新回复(0)