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
追答没有学指针和数组吗?
追问没有
请问,您现在有空吗,我很困惑
追答嗯 你说。
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
最后把数反过来就是结果
#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位数的数字
#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);
}