For循环中的While循环的代码解释
Code explanation for a While Loop within a For Loop
任何人都可以向我解释为什么下面程序的输出,如果你输入以下值:5、222、2043、29、2、20035 是 22222?我试图在纸上解决它,但我无法得到这个结果。
#include <iostream>
using namespace std;
int n=0;
int x=0;
int s=0;
int i=1;
int main() {
cin >> n;
for(i=1; i<=n; i++) {
cin >> x;
int nr=1;
while(x>9) {
nr=nr*10;
x=x/10;
}
s=s+x*nr;
}
cout << s;
return 0;
}
你的 while 循环每次都将 x 除以 10。由于您处理的是整数,因此只需将十进制数向右移动一位:7234 -> 723
。
它一直这样做直到它小于 10,或者换句话说,剩下一个(第一个)数字:7。然后它再次乘以 10^(乘以 10):7000。
这意味着您的 for 循环中的代码使每个 x 中除第一个数字以外的所有数字都为零。所以最后你会得到:200 + 2000 + 20 + 2 + 20000
任何人都可以向我解释为什么下面程序的输出,如果你输入以下值:5、222、2043、29、2、20035 是 22222?我试图在纸上解决它,但我无法得到这个结果。
#include <iostream>
using namespace std;
int n=0;
int x=0;
int s=0;
int i=1;
int main() {
cin >> n;
for(i=1; i<=n; i++) {
cin >> x;
int nr=1;
while(x>9) {
nr=nr*10;
x=x/10;
}
s=s+x*nr;
}
cout << s;
return 0;
}
你的 while 循环每次都将 x 除以 10。由于您处理的是整数,因此只需将十进制数向右移动一位:7234 -> 723
。
它一直这样做直到它小于 10,或者换句话说,剩下一个(第一个)数字:7。然后它再次乘以 10^(乘以 10):7000。
这意味着您的 for 循环中的代码使每个 x 中除第一个数字以外的所有数字都为零。所以最后你会得到:200 + 2000 + 20 + 2 + 20000