[root@localhost CH01]# cat base_c.c
#include <stdio.h>
#define MAXCHAR 101 /*最大允許字符串長度*/
int char_to_num(char ch); /*返回字符對應的數字*/
char num_to_char(int num); /*返回數字對應的字符*/
long source_to_decimal(char temp[], int source); /*返回由原數轉換成的10進制數*/
int decimal_to_object(char temp[], long decimal_num, int object); /*返回轉換成目標數制後字符數組的長度*/
void output(char temp[], int length); /*將字符數組逆序打印*/
int main()
{
int source; /*存儲原數制*/
int object; /*存儲目標數制*/
int length; /*存儲轉換成目標數制後字符數組的長度*/
long decimal_num; /*存儲轉換成的10進制數*/
char temp[MAXCHAR]; /*存儲待轉換的數值和轉換後的數值*/
int flag = 1; /*存儲是否退出程序的標誌*/
while(flag) /*利用輸入的flag值控制循環是否結束*/
{
printf("轉換前的數是:");
scanf("%s", temp);
printf("轉換前的數制是:");
scanf("%d", &source);
printf("轉換後的數制是:");
scanf("%d", &object);
printf("轉換後的數是:");
decimal_num = source_to_decimal(temp, source);
length = decimal_to_object(temp, decimal_num, object);
output(temp, length);
printf("繼續請輸入1,否則輸入0:\n");
scanf("%d", &flag);
}
return 0;
}
/*將字符轉換成數字*/
int char_to_num(char ch)
{
if(ch>='0' && ch<='9')
return ch-'0'; /*將數字字符轉換成數字*/
else
return ch-'A'+10; /*將字母字符轉換成數字*/
}
char num_to_char(int num)
{
if(num>=0 && num<=9)
return (char)('0'+num-0); /*將0~9之間的數字轉換成字符*/
else
return (char)('A'+num-10); /*將大於10的數字轉換成字符*/
}
long source_to_decimal(char temp[], int source)
{
long decimal_num = 0; /*存儲展開之後的和*/
int length;
int i;
for( i=0; temp[i]!='\0'; i++ );
length=i;
for( i=0; i<=length-1; i++ ) /*累加*/
decimal_num = (decimal_num*source) + char_to_num(temp[i]);
return decimal_num;
}
int decimal_to_object(char temp[], long decimal_num, int object)
{
int i=0;
while(decimal_num)
{
temp[i] = num_to_char(decimal_num % object); /*求出餘數並轉換爲字符*/
decimal_num = decimal_num / object; /*用十進制數除以基數*/
i++;
}
temp[i]='\0';
return i;
}
void output(char temp[], int length)
{
int i;
for( i=length-1; i>=0; i--) /*輸出temp數組中的值*/
printf("%c", temp[i]);
printf("\n");
}
打印1000以內的素數
[root@localhost CH01]# cat primer_test.c
#include<stdio.h>
#include<stdlib.h>
static void primer(void)
{
char primer[1001] = {0};
int i,j;
for(i = 2;i < 1001; i++)
{ if(primer[i] == 0)
{
for(j = 2*i;j < 1001 ;j+=i)
{
if(primer[i] == 0)
primer[j] = -1;
}
}
for(i = 2; i <1001; i++)
{
if(primer[i] == 0)
printf("%d is a primer\n",i);
}
}
}
int main()
{
primer();
}