PAT 乙等 1017 C语言
来源:互联网 发布:鼎捷软件股份有限公司 编辑:程序博客网 时间:2024/05/16 18:05
1017. A除以B (20)
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:123456789050987654321 7输出样例:
17636684150141093474 3
思路:只能用字符串一位一位转化为数字处理。被除数从字符串左侧起转化一位除以除数,若有余数乘10留到下一位,否则为零,余数乘10留到下一位。注意若第一位被除数小于除数不能输出零,必须有非零位输出后才可以输出0
一、起始变量
1.除数divider,被除数dibideder,每位余数left
2.flag标志位,用来标记是否有商的非零位输出
二、运算
1.读入被除数和除数。
2.在for循环中一位一位转化被除数,转化一位除以被除数,若非零输出,若为零,在已经有非零位商输出的前提下输出,否则不输出。
3.若有余数乘10留到下一位
4.若flag一直为0,则说明被除数小于除数,输出0
三、代码
#include "stdio.h"#include "string.h"int main(){char divideder[1001];int divider;int flag = 0;//是否有非零位商输出,在没有非零位输出之前0不输出; int i;int left = 0;//每位整除之后的余数; scanf("%s %d", divideder, ÷r);int len = strlen(divideder);//如果被除数为0,直接得结果; for(i = 0; i < len; i++){left = left*10 + divideder[i] - '0';if(left >= divider){printf("%d",left / divider);flag = 1;//输出商,并改变flag的值,flag是是否有一位的商被输出的标志 }else if(flag){printf("0");//商的第一位输出后,且被除数的第i位小于除数,则输出0; }left = left % divider;//得到余数 }if(flag == 0){printf("0");}//被除数只有一位且小于除数; printf(" %d",left);return 0;}
0 0
- PAT 乙等 1017 C语言
- PAT 乙等 1001 C语言
- PAT 乙等 1002 C语言
- PAT 乙等 1003 C语言
- PAT 乙等 1004 C语言
- PAT 乙等 1005 C语言
- PAT 乙等 1006 C语言
- PAT 乙等 1007 C语言
- PAT 乙等 1008 C语言
- PAT 乙等 1009 C语言
- PAT 乙等 1010 C语言
- PAT 乙等 1011 C语言
- PAT 乙等 1012 C语言
- PAT 乙等 1013 C语言
- PAT 乙等 1014 C语言
- PAT 乙等 1015 C语言
- PAT 乙等 1016 C语言
- PAT 乙等 1018 C语言
- Cascade Classifier 级联分类器
- MySQL语法大全_自己整理的学习笔记
- JAVA虚拟机类加载过程
- Scanner类中nextLine()方法与next()或nextInt()联用时可能出现一个常见的错误
- 求二叉树的深度
- PAT 乙等 1017 C语言
- Android NDK使用示例说明
- C/C++学习(7)strcpy函数与while循环
- Python 3基础教程6-for循环语句
- 文章标题js时间戳转时间
- magento 添加会员注册字段
- 错误:Gradle sync failed: Could not find method android() for arguments [build_6d4hiu27bgm2ho4bez6d80wx
- c语言练习
- 类 String理解和经典面试题,