sscanf(_flag, "%1d%n", &A, &j);
这一行代码把8改成了1就能通过测试
完全不知道为什么
修改了几个地方,但还是不知道错误是什么(8改成了1后就通过了,哈哈哈,能跑进行)
[C] 纯文本查看 复制代码 #include <stdio.h>
//123456789050987654321 7
//123456789050987654321 = 7 * 17636684150141093474 + 3
//17636684150141093474 3
int main()
{
int A, B;
int Q = 0, R = 0;//使得 A=B*Q+R 成立。
char flag[1001] = { 0 };//存储其中 A 中不超过 1000 位的正整数
char* _flag = flag;
int j = 0;//记录位移
unsigned int key = 1;//记录第几次循环
scanf("%s%d", flag, &B);//格式化输入
while (*_flag == '0')_flag++;//如果首位为0,先排除
while (1)
{
_flag += j;//纠正指针,指向正确位置
if (*_flag == '\0')break;//退出循环
sscanf(_flag, "%1d%n", &A, &j);//格式化输入/%n为读取输入的字符宽度(个数)
int temp = 1;
for (int i = 0; i < j; i++)
temp *= 10;
A = R * temp + A;//加上上一次循环的余数
R = A % B;
Q = A / B;
if (key++ == 1 && Q == 0 && *(_flag + 1) != '\0')continue;//特别对待A<B时
if (A < temp / 10)//若输入为 70,000,000,001 7//即前一次R为0,且现一次A的位数低于当前j,(如 001 A==1 实际是001)
printf("%0*d", j, Q);
else
printf("%d", Q);
}
printf(" %d\n", R);
return 0;
} |