c语言一个数分解成独立的数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言一个数分解成独立的数字相关的知识,希望对你有一定的参考价值。

知道一个数字,可能是1至四位数,将其分解后放到num数组里。
帮我写个函数
如1234:1,2,3,4
10:0,0,1,0

#include <stdio.h>
main()

int a;
scanf("%d",&a);
do

printf("%d,",a%10);

while(a/=10);

过去做的一道作业,貌似差不多,没放到数组里而已。
#include <stdio.h>
main()

int a;
int num[4]=0;
int n=3;
scanf("%d",&a);
do

num[n]=a%10;
n--;

while(a/=10);
for(n=0;n<4;n++)
printf("%d,",num[n]);

简单修改了一下
参考技术A 这个算法我想了很久不知道怎么用语言表达,举个例子吧:
对于15698,
首先,确定最高位,是万位,所以万位上的数字就是15698/10000=1;
下一位,千位15698/1000%10=5;
在下一位,百位15698/100%10=6;
十位,15698/10%10=9;
最后,个位15698/10.
最高位用最高为对应的单位“1”去除,个位用10去除,其他位先把欲求位变成个位,对10求余。
参考技术B 下面有两个函数 一个是用数字存储 一个是用字符存储 不知你要哪一个 我都写了
还有 只能够转换非负数

void convert(int dec,char num[])//传入你要转换的数字 以及存储的数组首地址

int i=0;
memset(num,0,sizeof(num));//数组清零
if(!dec)//判断非0

num[0]='0';
return;

while(dec)

num[i++]=(dec%10)+'0';//使用字符存储
dec/=10;

strrev(num);//逆序 这个函数需要使用string.h头文件 linux下这个函数不能使用 自己写一个就可以了


void convert(int dec,char num[])//传入你要转换的数字 以及存储的数组首地址

int i=0,tot;
char tmp[5]=0;
memset(num,-1,sizeof(num));//数组清零
if(!dec)//判断非0

num[0]=0;
return;

while(dec)

tmp[i++]=dec%10;//使用数字存储
dec/=10;

tot=i-1;
for(i=0;i<=tot;++i)//逆序存储
num[i]=tmp[tot-i];
参考技术C //---------------------------------------------------------------------------

#include <stdio.h>

int main(void)

int dig[4]=0;
int a,i=3;
scanf("%4d",&a);
while (a)

dig[i--]=a%10;
a/=10;

for (i = 0; i<4; i++)
printf("%d%c",dig[i],i<3?',':'\n');

return 0;

//---------------------------------------------------------------------------

c语言中假设一个数组中已经存放若干个数字字符,编写程序,将每个数字字符转换成对应的数字后存放在另一个

jijijiji

你的说法不对。数字是数字,字符时字符。不能混了。虽然字符到了内存里也是转换成数字的格式存放。简单点的你可以利用强制类型转换。我写一个,你琢磨其中的意思,用在自己的上面就行了。
#include "stdio.h"
void main()
char a[5]='h','e','l','l','o';
int b[6];
int i;
for(i=0;i<5;i++)
b[i]=int(a[i]);
printf("%d ",b[i]);
参考技术A #include<stdio.h>

main()
char c,*str;
int i,a[10];
for(i=0;i<10;i++)a[i]=0;//静态数组初始化
printf("input a string please:");//提示语句
scanf("%s",str);//输入动态数组定义的字符串
while(*str)//字符串*str不为空,循环继续;
c=*str;//把从*str数组中提出的元素赋值给c,用于操作
for(i=0;i<10;i++)
if(i==(int)c-48)//把字符c转化为int数据与i比较'0'的ASCII编码为48,'1','2'……依次为49,50……
a[i]++;//数到某个字符,表示该字符的数组元素加1;
*str++;//原字符串数组元素向后一位;


for(i=0;i<10;i++)
printf("\n\t%d\t%d",i,a[i]);//打印
getch();


字符串就是字符数组,只是表达方式不太一样而已,给你改写一下:

#include<stdio.h>
#define N 100 //字符数组最长为100
main()
char c,str[N];
int i,j,a[10];
for(i=0;i<10;i++)a[i]=0;//静态数组初始化
printf("input a string please:");//提示语句
scanf("%s",str);//输入动态数组定义的字符串
j=0;
while(str[i]&&j<N)//字符数组元素str[i]不为空,循环继续;
c=str[i];//把从str[]数组中提出的元素赋值给c,用于操作
for(i=0;i<10;i++)
if(i==(int)c-48)//把字符c转化为int数据与i比较'0'的ASCII编码为48,'1','2'……依次为49,50……
a[i]++;//数到某个字符,表示该字符的数组元素加1;
j++;//原字符串数组元素向后一位;


for(i=0;i<10;i++)
printf("\n\t%d\t%d",i,a[i]);//打印
getch();

你的串号我已经记下,采纳后我会帮你制作本回答被提问者采纳
参考技术B //我写的 你看看对不对,我的是统计一个文件中的单词个数,统计的是总的个数
//字符数组中存放太麻烦了,放在一个文件中好一点

#include<stdio.h>
#include<stdlib.h>
#define IN 1
#define OUT 0
int main()

char szFilename[256];
FILE *fp;
printf("input the file:");
scanf("%s",szFilename);
if((fp=fopen(szFilename,"r"))==NULL)

printf("the file don't exist!");
exit(1);

int flag=OUT;
int c;
int nw=0;
while((c=fgetc(fp))!=EOF)

if(c==' ')

flag=OUT;

else if(OUT==flag)

flag=IN;
nw++;


printf("THe num is:%d\n",nw);

return 0;
参考技术C #include <stdio.h>
void main()

char a[11]="1234567890";
int b[10];
int i;
for (i = 0;i<10;i++)

b[i] = a[i]-48;


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

printf("%d",b[i]);

参考技术D using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace baidu

class temp

public static void main()

new int[100].init(1, 200).ToStringArry().ToIntArray().Show();


public static class MyExtensions


public static string CharToString(this char[] temp)

string s = "";
for (int i = 0; i < temp.Length; i++)

s += temp[i].ToString();

return s;


#region//string
public static int[] ToIntArray(this string[] temp)

List<int> ls = new List<int>();
for (int i = 0; i < temp.Length; i++)

ls.Add(int.Parse(temp[i]));

return ls.ToArray();

public static string sort(this string temp)

return temp.Toint().sort().Tochararray().CharToString();


public static int[] ToIntArray(this string temp, string spliter)

string[] temp2 = temp.Split(spliter.ToCharArray());
List<int> ls = new List<int>();
for (int i = 0; i < temp2.Length; i++)

ls.Add(temp2[i].ToInt());

return ls.ToArray();


public static int ToInt(this string temp)

return int.Parse(temp);


public static int[] Toint(this string temp)


List<int> ls = new List<int>();
for (int i = 0; i < temp.Length; i++)

ls.Add((int)temp[i]);

return ls.ToArray();


public static byte ToTinyInt(this string temp)

return Convert.ToByte(temp);


public static int Count(this string temp, string temp2)

return (temp.Length - temp.Replace(temp2, "").Length) / temp2.Length;


public static int Count(this string temp, char[] sperater)

int count = 0;
for (int i = 0; i < temp.Length; i++)

for (int j = 0; j < sperater.Length; j++)

if (temp[i] == sperater[j])
count++;


return count;

public static int CountNum(this string temp)

int sum = 0;
for (int i = 0; i < temp.Length; i++)

if ((int)temp[i] >= 48 && (int)temp[i] <= 57)

sum++;


return sum;

public static int CountLetter(this string temp)

int sum = 0;
temp = temp.ToUpper();
for (int i = 0; i < temp.Length; i++)

if ((int)temp[i] >= 65 && (int)temp[i] <= 90)

sum++;


return sum;

public static int CountOther(this string temp)

return temp.Length - temp.CountLetter() - temp.CountNum();

public static string Md5Bit32(this string temp)

string strResult = "";
string strHashData = "";
byte[] arrbytHashValue;

System.Security.Cryptography.MD5CryptoServiceProvider oMD5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider();

try

arrbytHashValue = oMD5Hasher.ComputeHash(System.Text.Encoding.Default.GetBytes(temp));
//oMD5Hasher .ComputeHash (

//由以连字符分隔的十六进制对构成的String,其中每一对表示value 中对应的元素;例如“F-2C-4A”

strHashData = System.BitConverter.ToString(arrbytHashValue);

//替换-
strHashData = strHashData.Replace("-", "");

strResult = strHashData;


catch (System.Exception ex)

Console.WriteLine(ex.Message);

return strResult;

public static string Md5Bit16(this string temp)

return temp.Md5Bit32().Substring(8, 16);


public static string run(this string command)

string output = "";
try


Process cmd = new Process();
cmd.StartInfo.FileName = command;

cmd.StartInfo.UseShellExecute = false;

cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;

cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

cmd.Start();

output = cmd.StandardOutput.ReadToEnd();
Console.WriteLine(output);
cmd.WaitForExit();
cmd.Close();

catch (Exception e)

Console.WriteLine(e);

return output;

public static string run(this string command, string argument)

string output = "";
try

Process cmd = new Process();

cmd.StartInfo.FileName = command;
cmd.StartInfo.Arguments = argument;

cmd.StartInfo.UseShellExecute = false;

cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;

cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

cmd.Start();

output = cmd.StandardOutput.ReadToEnd();
Console.WriteLine(output);
cmd.WaitForExit();
cmd.Close();

catch (Exception e)

Console.WriteLine(e);

return output;

#endregion

#region//int.
public static int[] Perfect (this int max)

List<int> ls = new List<int>();

for (int i = 1; i < max; i++)

int temp = 0;
//Console.Write(i + "\t");
for (int j = 1; j < i; j++)

if (i % j == 0)

temp += j;


if (temp == i)

ls.Add(temp);


return ls.ToArray();

public static int[] sort(this int[] temp)

List<int> ls;
ls = temp.ToList();
ls.Sort();
return ls.ToArray();

public static char[] Tochararray(this int[] temp)

List<char> ls = new List<char>();
for (int i = 0; i < temp.Length; i++)

ls.Add((char)temp[i]);

return ls.ToArray();

public static int[] Remove(this int[] temp, int tmp)

List<int> ls = new List<int>();
ls = temp.ToList();
ls.Remove(tmp);
return ls.ToArray();

public static int[] RemoveAt(this int[] temp, int index)

List<int> ls = new List<int>();
ls = temp.ToList();
ls.RemoveAt(index);
return ls.ToArray();

public static int find(this int[] temp, int tmp)

return temp.ToList().IndexOf(tmp);

public static int[] insert(this int[] temp, int index, int tmp)

temp = temp.RemoveAt(index);
List<int> ls = new List<int>();
ls = temp.ToList();
ls.Insert(index, tmp);
return ls.ToArray();

#endregion

#region//init()
public static int[,] init(this int[,] temp)

Random rm = new Random();
int rank = temp.Rank;
int line = temp.GetLength(0);
int row = temp.Length / line;

for (int j = 0; j < line; j++)

for (int i = 0; i < row; i++)

temp[j, i] = rm.Next(9);


return temp;

public static string init(this string s, int lenght)

string temp = "";
Random rm = new Random();
for (int i = 0; i < lenght; i++)

temp += ((char)rm.Next(65, 90)).ToString();

return temp;

public static string[] ToStringArry(this int[] temp)

List <string > ls=new List<string> ();
for (int i = 0; i < temp.Length; i++)

ls.Add(temp[i].ToString());

return ls.ToArray();

public static int[] init(this int[] temp, int min, int max)

Random rm = new Random();
for (int i = 0; i < temp.Length; i++)

Rand:
int rm2 = rm.Next(min, max);
if (!temp.ToList().Contains(rm2))
temp[i] = rm2;
else
goto Rand;
//temp[i] = rm.Next(min,max);

return temp;

public static bool IsEven(int temp)

if (temp % 2 == 0 && temp != 0)
return true;
else
return false;

public static bool IsUneven(int temp)

if (temp % 2 != 0 && temp != 0)
return true;
else
return false;

public static bool Is0(int temp)

if (temp == 0)
return true;
else
return false;

public static int[] ReturnEven(this int[] temp)

return temp.ToList().FindAll(IsEven).ToArray().sort();

public static int[] ReturnUneven(this int[] temp)

return temp.ToList().FindAll(IsUneven).ToArray().sort();

public static int[] Return0(this int[] temp)

return temp.ToList().FindAll(Is0).ToArray().sort();

#endregion

#region//show
public static void Show(this byte temp)

Console.WriteLine(temp);
wline();

public static void Show(this string temp)

Console.WriteLine(temp);
wline();

public static void Show(this int temp)

Console.WriteLine(temp);
wline();

public static void Show(this int[,] temp)

int rank = temp.Rank;
int line = temp.GetLength(0);
int row = temp.Length / line;

for (int j = 0; j < line; j++)

for (int i = 0; i < row; i++)

Console.Write(temp[j, i] + " ");

Console.WriteLine();

wline();

public static int[] Show(this int[] temp)

for (int i = 0; i < temp.Length; i++)

Console.Write(temp[i] + " ");

Console.WriteLine();
wline();
return temp;

#endregion

public static void wline()

Console.WriteLine("-------------------------------------------------------------------");


以上是关于c语言一个数分解成独立的数字的主要内容,如果未能解决你的问题,请参考以下文章

连续正整数的和 C语言 不知道如何处理这个细节

如何用C语言编出 读入一个五位数,分割该数各位上的数并将分割的数字以间隔三

c语言如何将用户输入的数字拆成独立的数字,比如用户输入123,就拆成1,2,3?谢谢

c语言编程题打印出所有的“水仙花数”所谓“水仙花数”是指一个三位数其各位数字立方和等于该数本身

C语言如何将一个数字组成的字符串转变成十进制数

c语言质因数分解题目怎么做