让我们以数字123为例。我如何移动1,使得到的数字是231?
unsigned long int N;
scanf("%lu", &N);
unsigned long int firstDigit;
while (N >= 10)
{
N /= 10;
firstDigit = N;
count++;
}
我有这个代码来识别第一个数字是什么,但现在我不知道如何移动它。
发布于 2019-10-01 14:32:08
通过while循环,我们得到一个不包括第一个数字的数字(在ans
变量中)&
仅给定数的第一个数字(在'N‘变量中)。
unsigned long int N;
scanf("%lu", &N); // N=1234
unsigned long int ans=0;
unsigned long int pow=1;
while (N>9) {
ans += pow * (N%10);
pow *= 10;
N /= 10;
} // ans=234 N=1
ans = ans*10 + N;
执行后变量的值是什么:-
| condition | ans | pow | N |
| ----------------- | --------- | ---- | ----- |
| before loop | 0 | 1 | 1234 |
| 1234 > 9 | 4 | 10 | 123 |
| 123 > 9 | 34 | 100 | 12 |
| 12 > 9 | 234 | 1000 | 1 |
| 1 ≯ 9 (loop over) | | | |
| after loop | ans = 234 | | N = 1 |
发布于 2019-10-01 14:04:57
假设N = 546
并获得了firstDigit = 5
。因此,要将firstDigit移到最后一个位置,首先必须从N中删除firstDigit。如果为count = number of digits of N
,则N - (firstDigit * 10^(count-1))
将给出不带firstDigit的数字。当N=546时,你将得到removedFirstDigit = 46
。因此,您只需使用10 * removedFirstDigit + firstDigit
将firstDigit附加到最后一个位置,即可获得最终结果。遵循该代码可以更好地理解,
unsigned long int N;
scanf("%lu", &N);
unsigned long int value = N;
unsigned long int firstDigit;
int count = 0;
while (N >= 10)
{
N /= 10;
firstDigit = N;
count++;
}
unsigned long int powerOfTen = 1;
for(int i=1; i<=count; i++) {
powerOfTen *= 10;
}
unsigned long int removedFirstDigit = value - (firstDigit * powerOfTen);
unsigned long int ans = 10 * removedFirstDigit + firstDigit;
printf("%lu", ans);
您也可以通过将数字转换为字符串并将第一个字符移动到最后一个位置来解决此问题。
发布于 2019-10-01 15:37:11
换个角度看怎么样。我们将考虑使用字符串操作。
#include <stdio.h>
int main()
{
char i[10]="";
scanf ("%s", &i);
for (int j = 1; i[j] != NULL; j++)
printf ("%c",i[j]);
printf ("%c\n",i[0]);
return 0;
}
希望这能对您有所帮助:)
https://stackoverflow.com/questions/58177215
复制相似问题