繁体   English   中英

如何将第一个数字移动到 C 中的数字中的最后一个 position

[英]How to move first digit to the last position in a number in C

我们以数字 123 为例。 我将如何移动 1 以使结果数字为 231?

unsigned long int N;
scanf("%lu", &N);
unsigned long int firstDigit;
while (N >= 10)
{  
  N /= 10;
  firstDigit = N;
  count++;
}

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

执行后变量的值是多少:-

........ans......pow............N
(循环前)......0............1......1234
(健康)状况)
1234>9 ........4........10........123
123>9 ..................34........100........12
12>9 ........234......1000............1
1>9
(循环)
ans = ans*10 + N = (234)*10 + 1 = 2341

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 ;

假设N = 546并获得firstDigit = 5 因此,要将 firstDigit 移动到最后一个 position 首先你必须从N中删除 firstDigit 。 如果count = number of digits of NN - (firstDigit * 10^(count-1))将给出没有 firstDigit 的数字。 对于 N = 546,您将得到removedFirstDigit = 46 因此,您只需使用10 * removedFirstDigit + firstDigit将 firstDigit 附加到最后一个 position 即可获得最终答案。 遵循该代码以更好地理解,

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);

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

换个观点怎么样。 我们将考虑字符串操作。

#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;
  }

希望这有帮助:)

这是一个不使用循环的解决方案

#include <stdio.h>
#include <math.h>

int main() {
    unsigned long int length = 0;
    unsigned long int ans = 0;
    
    unsigned long int number;
    scanf("%lu", &number);   // number = 9731
    
    length = log10(number);
    
    unsigned long int power = pow(10,length);
    ans = (number%power)*10  +  number/power; // 7319
    
    printf("%lu %lu %lu %lu", number, length, power, ans);
}

编号:输入数据
长度:以 10 为底的对数将给出 ((数字大小) - 1)
功率:10长度

获取答案:

  • 取第一个数字(数字/幂) // got only 9
  • 取 rest 的位数(数字 % 功率) // got 731
  • 在添加这两者之前,应该删除重叠// 9 & 1
    - 所以数字的 rest 应该//731* from 731
    - 为此乘以 10 // 731 become 7310
  • 添加两个数据// 7310 + 9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM