闲的!
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 20
void Input(int a[])
{ //将数据每 4位拆分存入数组,a[1]单位为 1,a[2]单位为万,a[3]单位为亿、、、、、、
//a[0]存储数组中有效位。
//例如 123456789 存储形式为 3 6789 2345 1
int i, j;
char str[MAX] = {0};
scanf("%s", str);
j = strlen(str);a[0] = j / 4 + 1;
for (i = 1, --j; j >= 0; ++i)
{
a[i] = str[j--] - '0';
if(j < 0) break;
a[i] += (str[j--] - '0') * 10;
if(j < 0) break;
a[i] += (str[j--] - '0') * 100;
if(j < 0) break;
a[i] += (str[j--] - '0') * 1000;
}
}
int Divide(int a[], int n)
{ //除法运算 把 a除以 n的值存入 a,函数返回值为 余数
//例如 3 6789 2345 1 除以100 后变为 2 4567 123
int temp = 0;
for (int i = a[0]; i >= 1; --i)
{
temp = a[i] % n;
a[i] /= n;
if(i > 1)
a[i-1] += temp * 10000;
}
if (0 == a[1] && 1 == a[0])
{a[0]=0;return temp;}
while ( !a[ a[0] ] ) --a[0];
return temp;
}
char Get(int n, int base)
{
if (n < 0 || n > base)
{
puts("Data Error!");
exit(0);
}
return n < 10 ? n + '0' : n + 'A' - 10;
}
void my_itoa(int a[], char *str, int base)
{ //底除取余法
for (int i = 0; a[0];)
str[i++] = Get(Divide(a, base), base);
str[i] = '\0';
strrev(str); //倒写余数
}
int main()
{
int a[MAX/4+3] = {0};
char str[MAX] = {0};
Input(a);
my_itoa(a, str, 16);
puts(str);
return 0;
}
[
本帖最后由 azzbcc 于 2013-3-15 22:35 编辑 ]