首页 > 编程知识 正文

二进制数的算术运算教案(大数运算之大数减法)

时间:2023-05-04 09:16:29 阅读:123282 作者:456

英国的a-b(middle ) time limit :1000 msmemorylimit 336064 mb64-bitintegerioformat 3360 % lld已解决|单击problem descriptioformat 其中Lena和lenb分别是数字a和数字b的长度,数字a和数字b不是负的,不带前缀0。 除非数字本身为0,否则Output将输出一行来表示答案。 (请勿加上前缀0。 除非输出的数字本身为0,否则不要加上前缀0

# include stdio.h # include string.h//大部分减法不正常之处//1 .字符串存储大部分//2。 将字符转换为数字,按相反顺序存储在数组中。 逆序用妙/////3.逆序后,能巧妙处理位数不同时的具体评论。 只要传递较长的位数,int //voidsub(int*x、int* y、int len )//默认的x就可以是较大的数(intI=0; int j=0; for(I=0; ilen; I )//100 - 9阵列布局为001 - 900的情况,190(if(x[I]-y[I]=0) /在此情况下保持不变) { z[i]=x[i] - y[i]; } else { z[i]=x[i] 10 - y[i]; 10 x[i 1]-=1; //次位减1}for(I=Len-1; i0; 既然是I----//减法,那么z的最大位数是len,最低也是1。 因此,即使他有最大位数len,如果没有len位,比实际位数多的部分也一定为0。 然后,删除多馀的前缀0即可。 len必须至少为1{if(z(I )==0)。 (len (() ) 65 } else { break; }for(I=Len-1; i=0; I--}{printf('%d ',z[i] ); }}int main () { char a[100005]={0}; 以//字符串存储多个char b[100005]={0}; int x[100005]={0}; int y[100005]={0}; 扫描(' % s % s )、a和b ); intlen1=Strlen(a; intlen2=Strlen(b; int i=0; int k=0; for(I=len1-1,k=0; i=0; 将I--//字符串中的字符转换为数字,并按相反顺序存储在数组中{ x[k ]=a[i] - '0'; }for(I=len2-1,k=0; i=0; 将I--//字符串中的字符转换为数字,并按相反顺序存储在数组中{ y[k ]=b[i] - '0'; //函数的缺省数减去小数后,可以有效地处理减号,您学到了吗? if(len1len2)//相当正常) sub(x,y,len1); (elseif ) len1len2)//变小了) printf ) '-'; sub(y,x,len2); } else//位数相同{for(I=Len1-1; i=0; I----//位数相同,len1 len2谁都相同,从最高位到{if(x(I )==y (I ) } ) if (I==0) )//这意味着两个数完全相同} continue; (if ) x ) I ) y ) I ) )/x大) sub ) x,y,len1); 布雷克; } else //y[i]大{printf('-' ); sub(y,x,len2); 布雷克; } }返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。