本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
算法:
- 算法开始。
- 初始化变量字符串1、整型变量除数、整形变量临时变量为零、字符串2、整形变量余数。初始化指针1,指针2,将指针1指向字符串1第一个字符,指针2指向字符串2第一个字符。
- 读取字符串1和被除数。
- 判断指针1是否指向字符串1结束符,如果是跳到第十一步。
- 临时变量等于临时变量乘以十加上指针1指向的字符所代表的数字。
- 如果指针1指向字符串1第一个字符而且临时变量除以除数的结果为零,则跳到第十步。
- 指针2所指向的字符等于临时变量除以除数结果的字符。
- 临时变量等于临时变量除以除数的余数。
- 指针2加一。
- 指针1加一。回到第四步。
- 如果指针2等于字符串2第一个字符的地址,就讲指针2所指向地址的字符设置为‘0’。指针2加一。
- 指针2所指向的字符设置为结束符。
- 余数等于临时变量
- 打印字符串2和余数。
- 算法结束。
注意:使用指针时,如果要判断指针所指向的字符则一定要加上星号。
下列代码使用C语言,运行于Xcode,可直接运行于PAT上。
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
char a[1100];
int b;
char q[1000];
int r;
char* tmp_a=a;
char* tmp_q=q;
int i=0;
char c0='0';
scanf("%s %d", a, &b);
while(*tmp_a!='\0'){
i=i*10+(*tmp_a-c0);
if(!((i/b==0)&&(tmp_a==a))){
*tmp_q=c0+i/b;
i%=b;
tmp_q++;
}
tmp_a++;
}
if(tmp_q==q){
*tmp_q = '0';
*(tmp_q+1)='\0';
}
else{
*tmp_q='\0';
}
r = i;
printf("%s %d", q, r);
return 0;
}