c语言中实现将一个不确定位数的整数按个十百……位分离,后存入一个数组

如题所述

#include<stdio.h>

#define N 100

int main()

{

  int a[N];

  long b,i = 0,j,status;

  scanf("%d",&b);

  a[i] = b % 10;

  status = b / 10;

  while(status != 0)

  {

  i++;

  a[i] = status % 10;

  status = status / 10; 

  }

  printf("%d\n",i + 1);

  for(j = 0; j <= i; j++)

  printf("%d  ",a[j]);

  printf("\n");

  for(j = i;j >= 0; j--)

  printf("%d",a[j]);

  printf("\n");

  return 0;

}


一般使用的数据都不会超过100位,就算是long型或者是long long型都不会,所以就随便选100了。

如果你想使用c99标准里的变长数组,这个我就不在此赘述了,请你百度一下。

另外,还有一种方法是,把数字当做是字符串输入,然后进行类似处理就ok了。

相信你可以的。

追问

就不对了啊

追答

#include
#include
#define N 100
int main()
{
unsigned long long n=7936508;
unsigned long long target,status;
int k;
int ws;
unsigned long long num;
unsigned long long a[N];
int i;
for(; n <= 1844674407370955165; n++)
{
i = 0; //i没有初始化
target = n * 126;
a[i] = target % 10;
status = target / 10;
while(status != 0)
{
i++;

a[i] = status % 10;
status = status / 10;
}
printf("%I64d 是 %d位数\n",target,i + 1);
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-30
在你输入的时候,其实无论是数组还是字母,敲入的每个键都会转化为一个字符,而数字也对应着ASCII所规定的编码。因此,首先应该将这个输入的整数当做一个字符串来处理,读入字符串后,对整个字符串作遍历(循环),直到遇到字符串末尾的'\0‘字符,这样就能把每个数字的编码读取出来,把这个编码减去’0‘就能得到所表示的一位数字

#include <stdio.h>
...
int num[100];
char *str;
gets(str);
...
//统计位数
int counter=0;
while('\0' != str[counter]){
counter++;

}

for(int i=counter-1,j=0;i>=0;i--,j++){
num[j] = str[i] - ’0‘;
}

// so, num中就放着倒序排列的各位数,counter中放着该整数的位数
第2个回答  2013-03-31
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
while(1){
char a[100];
scanf("%s",a);
for(int i=0;i<=strlen(a);i++)
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}

看看这个
第3个回答  2013-03-30
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,*p,j=0;
p=(int*)malloc(sizeof(int));
printf("请输入一个整数\n");
scanf("%d",&i);
i*=10;
while(i/=10)
{
int a;
a=i%10;
p[j++]=a;
p=(int*)realloc(p,sizeof(int)*(j+1));
}
for(i=0;i<j;i++)
printf("p[%d]=%d\n",i,p[i]);
return 0;
}
动态分配内存,使运行内存更小,而且理论上适用于无论多少位的整数
相似回答