高精度与低精度的除法
思路:
将除数看作整体。先将大数的第一个高位与除数作比较,如果小于除数(不够除)则该位商为零,并将该位乘以10加上下一位的值保存到余数中(即上一位的余数乘以10加上该步的位的值);如果大于或等于除数(够除),则商即为对应除后的商,余数为对应余数。计算完后要注意高位可能有多余的零,要忽视这些零,但要保证有一位输出(同高精度减法)。
注意:除法从高位开始计算!
代码:

#include<cstdio> #include<cstring> struct bign{ int d[1000]; int len; bign(){ memset(d,0,sizeof(d)); len=0; } }; bign change(char str[]){ bign a; a.len=strlen(str); for(int i=0;i<a.len;i++){ a.d[i]=str[a.len-1-i]-'0'; } return a; } bign div(bign a,int num,int &r){ bign b; b.len=a.len;//被除数的每一位与商的每一位一一对应 for(int i=a.len-1;i>=0;i--){ r=r*10+a.d[i]; if(r<num){ //不够除 b.d[i]=0; } else{ b.d[i]=r/num; r%=num; } } while(b.len-1>=1 && b.d[b.len-1]==0){ //去掉高位零,同时保证有一位数输出 b.len--; } return b; } void print(bign a){ for(int i=a.len-1;i>=0;i--){ printf("%d",a.d[i]); } } int main() { char str[1000]; int r=0;//r为余数 int num; scanf("%s%d",str,&num); bign a=change(str); print(div(a,num,r)); printf("\n余数为:%d",r); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具