【算法笔记】B1017 A除以B
1017 A除以B (20 分)
本题要求计算 A/B ,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
codes:
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 struct num{ 5 int d[1010]; 6 int len; 7 num(){ 8 memset(d, 0, sizeof(d)); 9 len = 0; 10 } 11 }; 12 //先保存数的低位,以便除的时候去掉高位的0 13 num change(string s){ 14 num a; 15 a.len = s.size(); 16 for(int i = 0; i < a.len; i++){ 17 a.d[i] = s[a.len - i - 1] - '0'; 18 } 19 return a; 20 } 21 num divide(num a, int b, int& r){ 22 num c; 23 c.len = a.len; 24 for(int i = a.len - 1; i>=0; i--){ 25 r = r * 10 + a.d[i]; 26 if(r < b) c.d[i] = 0;//不够除商0 27 else{ 28 c.d[i] = r / b; 29 r = r % b; 30 } 31 } 32 //去掉高位的0,只需要长度减小,实际没有删除 33 while(c.len - 1 >= 1 && c.d[c.len - 1] == 0){ 34 c.len--; 35 } 36 return c; 37 } 38 void print(num n){ 39 for(int i = n.len - 1; i >= 0; i--){ 40 cout<<n.d[i]; 41 } 42 } 43 int main(){ 44 string str1, str2; 45 int b, r = 0; 46 cin>>str1>>b; 47 num a = change(str1); 48 print(divide(a, b, r)); 49 cout<<" "<<r; 50 return 0; 51 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 程序员转型AI:行业分析
· 深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI