首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中将数字的第一位移到最后一位

如何在C中将数字的第一位移到最后一位
EN

Stack Overflow用户
提问于 2019-10-01 10:00:21
回答 3查看 785关注 0票数 0

让我们以数字123为例。我如何移动1,使得到的数字是231?

代码语言:javascript
运行
复制
unsigned long int N;
scanf("%lu", &N);
unsigned long int firstDigit;
while (N >= 10)
{  
  N /= 10;
  firstDigit = N;
  count++;
}

我有这个代码来识别第一个数字是什么,但现在我不知道如何移动它。

EN

回答 3

Stack Overflow用户

发布于 2019-10-01 14:32:08

通过while循环,我们得到一个不包括第一个数字的数字(在ans变量中)&

仅给定数的第一个数字(在'N‘变量中)。

代码语言:javascript
运行
复制
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;   

执行后变量的值是什么:-

代码语言:javascript
运行
复制
 |     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 | 
票数 1
EN

Stack Overflow用户

发布于 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附加到最后一个位置,即可获得最终结果。遵循该代码可以更好地理解,

代码语言:javascript
运行
复制
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);

您也可以通过将数字转换为字符串并将第一个字符移动到最后一个位置来解决此问题。

票数 0
EN

Stack Overflow用户

发布于 2019-10-01 15:37:11

换个角度看怎么样。我们将考虑使用字符串操作。

代码语言:javascript
运行
复制
#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;
  }

希望这能对您有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58177215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档