您的位置:首页 > 其它

PAT乙级:1017. A除以B (C)

2016-08-18 21:46 423 查看


本题不难,需要自己用字符串,简易实现除法效果。代码如下:

#include <stdio.h>
#include <stdlib.h>
int charToInt(char c)
{
return (int)(c-'0');
}
char intToChar(int i)
{
return (char)(i+'0');
}
int main()
{
char A[1000];
int B;
scanf("%s %d",&A,&B);
char* t=A;
int length=0;//A的长度,即记录A的位数
//获得A的length
while(*t!='\0')
{
t++;
length++;
}
char Q[1000];//商
int R;//余数
int Q_index=0;
//先考虑数小的情况,然后考虑数大的情况
if(length==1)
{
Q[0]=intToChar(charToInt(A[0])/B);
Q[1]='\0';
R=charToInt(A[0])%B;
}else{
int i=0;
int temp_R=0;
int now_number=0;
for(;i<length;i++)
{
now_number=charToInt(A[i])+temp_R*10;//由于是逐位除的(i++),所以只用增加上一位没有除尽的
int now_Q=now_number/B;//当前除法的商
if(now_Q==0)
{
if(Q_index==0)
{
//如果目前商还没有一个正整数填入,不能在前面赋上零
}else{
Q[Q_index]=intToChar(now_Q);
Q_index++;
}
}else
{
Q[Q_index]=intToChar(now_Q);
Q_index++;
}
temp_R=now_number%B;//获取本次的余数,这里很好想,因为if条件判断是是否商零。无论商不商0,都会有余数,所以余数写在最后即可。
}
R=temp_R;//最后的余数为最后一次除数计算的余数
Q[length]='\0';//为商添加字符串结尾
}
printf("%s %d",Q,R);
system("pause");
return 0;
}


祝大家编程顺利,生活幸福、美满!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: