前言:
今天小伙伴们对“c语言读数”可能比较看重,兄弟们都想要分析一些“c语言读数”的相关资讯。那么小编在网络上收集了一些对于“c语言读数””的相关内容,希望咱们能喜欢,朋友们快快来了解一下吧!超大数除法4
一、运行结果展示:
二、特点:
1 用数组的1个单元存储4位整数
2 输出时从个位向前每4位加一个“ ’ ”,便于中文的“个 十 百 千 万,十万 百位 千万 亿,十亿 百亿 千亿 万亿……读数”。
三、C语言编程如下:
#include <stdio.h> /*包含输入输出函数*/
#include <string.h> /*包含字符串处理函数*/
#define N 30 //常数N应大于数据的最大位数
main ()
{ char zfc[N*4]; //字符串zfc
int c[N]={},s[N]={},y[N*2]={},xj; //被除数b,除数c,商s,余数y,新积xj
int x,i,j,k,lbz,lb; //循环变量x,i,j,k;被除数总位数lbz,单元数lb
int lcz,lc,l,jw,ss; //除数总位数lcz,单元数lc;商单元数l,进位jw,试商ss
//输入及转换:
printf("请连续输入被除数:"); gets(zfc); //读入被除数
lbz=strlen(zfc)-1; i=lb=lbz/4+1; //求被除数总位数lbz,单元数lb
for(x=lbz;x>=0;x--) //每4位为1单元,把被除数字符串转换成整数:
{ y[i]=y[i]*10+zfc[lbz-x]-48;
if(x%4==0) {i--;}
}
printf("请连续输入除数:");gets(zfc); //读入除数
lcz=strlen(zfc)-1; i=lc=lcz/4+1; //求除数总位数lcz,单元数lc
for(x=lcz;x>=0;x--) //每4位为1单元,把除数字符串转换成整数:
{ c[i]=c[i]*10+zfc[lcz-x]-48;
if(x%4==0) {i--;}
}
//做除法运算:
for(i=lb;i>=lc;i--) //1.定首位(从高位开始除):
{ y[i]+=y[i+1]*10000;y[i+1]=0; //上次余数合并到本次
s[i]=0; //商先置0(对不够除的:商0然后后移1单元)
while(y[i]>c[lc]) //够除则除:
{ if(y[i]>=214748) ss=y[i]/(c[lc]+1); //试商ss,加1为防商过大
else ss=(y[i]*10000+y[i-1])/(c[lc]*10000+c[lc-1]+1); //一次看两单元
if(ss==0) ss=1; //因余数大于除数,所以至少商1
jw=0;s[i]+=ss; //进位jw置0,累加商s
for(k=1;k<=lc-1;k++) //除法核心运算:
{ xj=c[k]*ss+jw; //新积=除数*试商+进位
if(xj<=9999)jw=0; else {jw=xj/10000;xj%=10000;} //求积的进位及本位
l=k+i-lc; //定位:通过l把k与i联系起来
if(y[l]<xj) {y[l]+=10000;y[l+1]--;} //借1当10000
y[l] -=xj; //相减
}
xj=c[lc]*ss+jw;
y[i]-=xj; //最高位相减
}
}
while(y[lc]>=c[lc]) //2.后续处理:
{ for(x=lc;x>=1;x--) //逐位比较余数与除数:
{ if(y[x]>c[x]) break; //1).遇到大的,退出内循环:去减一遍
if(y[x]<c[x]) goto tc; //2).遇到小的(说明除完了),退出外循环
}
s[lc]++; //3)没有中途退出循环,说明余数 >= 除数,商加1,然后再减一遍:
for(x=1;x<=lc-1;x++)
{ if(y[x]<c[x]){y[x]+=10000;y[x+1]--;} //借1当万
y[x]-=c[x]; //相减
}
y[lc]-=c[lc];
}
tc: //退出循环标记
for(x=lc;x<=lb-1;x++) //3.处理商进位:
{ if(s[x]>=10000) {s[x+1]++;s[x]-=10000;}
}
if(s[lb]==0) lb--; //只有商的首单元可能为0
//输出:
printf("商=%d",s[lb]);lb--; //1.输出商的首单元
for(x=lb;x>=lc;x--) //输出商的其余单元:
{ if(s[x]>=1000) printf("'%d",s[x]);
else if(s[x]>=100) printf("'0%d",s[x]);
else if(s[x]>=10) printf("'00%d",s[x]);
else printf("'000%d",s[x]);
}
printf(" 余数="); //2.输出余数:
for(x=lc;x>=1;x--) //逐单元检查余数:
{ if(y[x]!=0||x==1) {lc=x;break;} //标记非0首单元,退出
}
printf("%d",y[lc]);lc--; //输出余数的非0首单元
for(x=lc;x>=1;x--) //输出余数的其余单元:
{ if(y[x]>=1000) printf("'%d",y[x]);
else if(y[x]>=100) printf("'0%d",y[x]);
else if(y[x]>=10) printf("'00%d",y[x]);
else printf("'000%d",y[x]);
}
return 0;
}
标签: #c语言读数 #c语言选出数组中最大的数