我的任务是将十进制数转换为基数p
.p
由用户输入.到目前为止这是我的代码:
for(int i = 0; i < 100; i++) { if(a % p == 0) nn[i] = '0'; if(a % p == 1) nn[i] = '1'; if(a % p == 2) nn[i] = '2'; if(a % p == 3) nn[i] = '3'; if(a % p == 4) nn[i] = '4'; if(a % p == 5) nn[i] = '5'; if(a % p == 6) nn[i] = '6'; if(a % p == 7) nn[i] = '7'; if(a % p == 8) nn[i] = '8'; if(a % p == 9) nn[i] = '9'; if(a % p == 10) nn[i] = 'A'; if(a % p == 11) nn[i] = 'B'; if(a % p == 12) nn[i] = 'C'; if(a % p == 13) nn[i] = 'D'; if(a % p == 14) nn[i] = 'E'; if(a % p == 15) nn[i] = 'F'; a = a / p; if(a == 0) break; } for(int qq = strlen(nn) - 1; qq >= 0; qq--) cout << nn[qq];
其中a
是十进制数,char nn
是输出的保存位置.我有这个问题:程序随机输出3个符号和正确的答案.为什么会发生这种情况,我该如何解决?
问题是你的nn
字符串仍然没有终止.nn[i+1]='\0'
在break
此之前设置将解决此问题:
if(a==0) { nn[i+1] = '\0'; break; }
请注意,您的程序相当不理想:if
您可以使用字符串文字和索引,而不是设置大型的s 链,如下所示:
char *digits = "0123456789ABCDEF"; for(int i=0;i<100;i++) { nn[i]=digits[a%p]; a=a/p; if(a==0) { nn[i+1] = '\0'; break; } }