mason1 @ 2024-05-26 09:16:27
具体看代码,RE了```cpp
using namespace std; int n,r,i; string a[1000010]; int main(){ std::cin>>n>>r; while(n!=0){ if(n%r==0){ a[i]='0'; for(int j=i;j>=0;j--){ std::cout<<a[j]; } return 0; }else if(n%r>=10){ a[i]=n%r+'A'; i++; }else{ a[i]=char(n%r); i++; } } for(int j=i;j>=0;j--){ std::cout<<a[j]; } return 0; }
服了
by jcf666 @ 2024-05-26 09:34:08
这markdown写得真是不堪入目。(修改一下)
具体看代码,RE了
#include<bits/stdc++.h>
using namespace std;
int n,r,i;
string a[1000010];
int main(){
std::cin>>n>>r;
while(n!=0){
if(n%r==0){
a[i]='0';
for(int j=i;j>=0;j--){
std::cout<<a[j];
}
return 0;
}
else if(n%r>=10){
a[i]=n%r+'A'; i++;
}
else{
a[i]=char(n%r); i++;
}
}
for(int j=i;j>=0;j--){
std::cout<<a[j];
}
return 0;
}
by jcf666 @ 2024-05-26 09:45:48
你RE的原因很简单,就是n没有除,导致的死循环
by jcf666 @ 2024-05-26 10:07:32
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,r,i;
char a[1000010];
int main(){
cin>>n>>r;
while(n!=0){
int k=n%r;
if(k>=10){
k=k-10;
a[i]=k+'A'; i++;
}
else{
a[i]=char(k+'0'); i++;
}
n/=r;
}
for(int j=i-1;j>=0;j--){
cout<<a[j];
}
return 0;
}
改了几个点:
1.char(n%r)并不能直接将n%r转换为对应的字符,会出现其他字符,应加上+'0'就能转化为对应的数字了。
2.在循环末尾加上n/=r,这也是你程序RE的原因
4.a为字符数组即可,没必要定义为string类型
5.引用std命名空间后,就没必要再在cin和cout前加std::了
6.进制转换中央出现0的情况很多,而你的程序再见到0时就直接终止了,导致输出过短
by mason1 @ 2024-05-30 20:44:17
@jcf666 think you
by yyh2024 @ 2024-06-03 21:21:24
@jcf666 6