?? 整數在2到16進制之間任意轉換的程序.txt
字號:
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char digit[16]={"0123456789abcdef"};
int readJZS(int org_goal);
int read_org_data(char *data, int org);
void shift_all(char *org_data, int org, char *goal_data, int goal);
long other_to_ten(char *org_data, int org);
void ten_to_other(long ten, char *goal_data, int goal);
int main(int argc, char *argv[])
{
int org;
int goal;
char org_data[20]={'\0'};
char goal_data[20]={'\0'};
int tmp;
char c;
while (1)
{
org=readJZS(0);
if (org==0)
return 0;
tmp=read_org_data(org_data, org);
if (tmp==0)
return 0;
goal=readJZS(1);
if (goal==0)
return 0;
shift_all(org_data, org, goal_data, goal);
printf("Result:%s",goal_data);
printf("Press Q to quit!\n");
c=getchar();
if (toupper(c)=='Q')
break;
}
system("PAUSE");
return 0;
}
int readJZS(int org_goal)
{
int ret=0;
while (1)
{
if (org_goal==0)
printf("Please input origion jin zhi shu(0: complete):");
else
printf("Please input goal jin zhi shu(0: complete):");
scanf("%d",&ret);
getchar();
if (ret>=2 && ret<=16)
return ret;
else if(ret!=0)
{
printf("Please input integer between 0 and 16.\n");
continue;
}
else
return 0;
}
}
int read_org_data(char *data, int org)
{
int i;
char *p;
int f=0;
int h=1;
while (1)
{
printf("Please input origion data (integer):");
/*gets(data);*/
scanf("%s",data);
getchar();
p=data;
if (strlen(data)==0)
return 0;
while (*p)
{
f=0;
for (i=0;i<org;i++)
{
if (*p==digit[i])
{
f=1;
break;
}
}
if (f==0)
{
h=0;
break;
}
p++;
}
if (h==0)
{
continue;
}
else
{
return 1;
}
}
}
void shift_all(char *org_data, int org, char *goal_data, int goal)
{
long ten;
ten=other_to_ten(org_data, org);
ten_to_other(ten, goal_data, goal);
}
long other_to_ten(char *org_data, int org)
{
long ret=0;
char *p=org_data;
int d;
while (*p)
{
if (*p>=48 && *p<58)
{
d=*p-48;
}
else if(*p>=65 && *p<70)
{
d=*p-55;
}
else if(*p>=97 && *p<102)
{
d=*p-87;
}
ret=ret*org+d;
p++;
}
return ret;
}
void ten_to_other(long ten, char *goal_data, int goal)
{
int i=0;
while (ten>0)
{
goal_data[i++]=digit[ten%goal];
ten=ten/goal;
}
strrev(goal_data);
}
此程序已通過調試。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -