c语言中,如何在自己输入一个任意数之后,从输入数字最后一位开始,

c语言中,如何在自己输入一个任意数之后,从输入数字最后一位开始,向前每隔一位,取一个数字,组成新的数字。如:数字127398,组成后为238

你的这个问题难点在于判断输入的数是多少位的。我这里运用了一个将数转换成字符数组(sprintf函数),然后用strlen函数算出这个int型的数有多少位。后面再利用一个字符数组来接收修改后的数,再由字符串转成数字就好。具体见代码。

代码在linux系统下 gcc编译器下运行通过,结果如下。在vs下同样可以通过



/*****************************************


  Purpose : reset integer number

 

****************************************/

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

int main()

{

        int len,i,lm;

        long oriNum; // original

        long reNum;  // modify

        char transfer[300] = {0};// receiver integer number

        char *newStr = NULL;

        printf("input original number :");

        scanf("%ld",&oriNum);

        sprintf(transfer,"%ld",oriNum);

        len = strlen(transfer);

        if(len % 2 == 0)

                lm = len/2;

        else

                lm = len / 2 + 1;

        newStr = (char *)malloc(sizeof(char)*lm);

        for(i = len - 1; i >= 0; i = i - 2)

        {

                newStr[lm-1] = transfer[i];

                lm--;

        }

        reNum = (long)atoi(newStr);

        free(newStr);

        printf("modify number is : %ld\n",reNum);

        return 0;

}

追问

你好,我想我现在并没有学到你这一步

我只要现在只设计loop, while , if 的状态和void

追答

没有学指针和数组吗?

追问

没有

请问,您现在有空吗,我很困惑

追答

嗯 你说。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
#include""
void main()
{
   int num,num1=0,index=0;
   printf("输入一个整数:");
   scanf("%d",&num);
   
   
   while(num)
   {
      if(index%2==0)num1=num1*10+num%10;
     index++;
     num /=10;
   }
   //将num1逆序
   num=0;
   while(num1)
   {
    num=num*10+num1%10;
 num1 /=10;  
   }
printf("新的整数为:%d",num);
}

先将需要的特定位置数字提取存到num1内,取好后是逆序的,再逆序存入num即可

追问

您好,我没看懂您设的是什么

追答

先把数字输入到num,如num=127398,再将num除10循环,直到num==0,index表示第几位,从最后一位开始为0递增,8是0位(index=0),9是1位(index=1),3是2位(index=2),那么你题目要求从最后一个开始隔一个取一位,所以只要index为偶数就是你需要的。但是取数是从低到高,为了方便临时存下就是逆序存的,例如index=2时:8*10+3,index=4时:89*10+2

最后把数反过来就是结果

本回答被提问者和网友采纳
第2个回答  2016-06-15

#include"stdio.h"

int main()

{char s[30];

 int i,j,x=0;

scanf("%s",s);

for(i=0;s[i];i++);

for(j=--i%2;j<=i;j+=2)

x=x*10+s[j]-'0';

printf("%d\n", x);

}

追问

你好
我还是有问题就

如果我只#include #include呢

追答

这里只用到基本输入输出,没有用到数学库和string

追问

请问你的char30是指什么

追答

就是允许最多输入一个29位数的数字

第3个回答  推荐于2018-05-14
#include <stdio.h>
#include <math.h>

int main(void)
{
int s_n;//输入的数及整除10后的数
int e_n;//每次取的个位数
int cnt = 0;//统计位数
int m_n = 0;//组成的新数
scanf("%d", &s_n);
while(s_n > 0)
{
e_n = s_n % 10;
s_n /= 10;
if(cnt % 2 == 0)//隔位计数,是2的倍数
m_n += e_n * pow(10, cnt/2);//10为基数的组成形式
cnt++;
}
printf("%d\n", m_n);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网