本帖最後由 enter 於 2015-8-7 22:09 編輯
新發現,其實最大重點竟是輸入的數值的型態,要長達 long long int 型態,則原始的寫法也可以解出很長的數字和負數。但原理仍沒想通。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int arr[32]; //採一個整數占有 4 byte 共32個bits(0/1)的意思,但arr[32]本身的長度可是占了128byte。
char str[32];
//int j,d,x,k;
char ch;
int j,k;
long long x,d; //輸入的數值採 long long (int)
do
{
printf("Enter a number:\n");
scanf("%d",&d);
x=d;
for(j=0;j<32;j++)
{
arr[31-j]=x%2; //arr[]的最後一元素號碼是32-1=31
x=x/2; //x除以2之後的商數要繼續除以2,這是本演算法的重點。
}
printf("The Binary for %d is: ",d);
x=d;
k=0;
for(j=0;j<32;j++)
{
if(arr[j]!=0) k=1;
if(k==1)
printf("%d",arr[j]);
}
printf("\n");
//system("pause");
for(j=0;j<32;j++){
arr[31-j]=x%8;
x=x/8;
}
printf("The Octal for %d is: ",d);
k=0;
for(j=0;j<32;j++)
{
if(arr[j]!=0) k=1;
if(k==1)
printf("%d",arr[j]);
}
printf("\n");
//system("pause");
x=d;
for(j=0;j<32;j++)
str[j]='\0';
for(j=0;j<31;j++){
if(x%16==0)
str[30-j]='0';
else if(x%16==1)
str[30-j]='1';
else if(x%16==2)
str[30-j]='2';
else if(x%16==1)
str[30-j]='1';
else if(x%16==3)
str[30-j]='3';
else if(x%16==4)
str[30-j]='4';
else if(x%16==5)
str[30-j]='5';
else if(x%16==6)
str[30-j]='6';
else if(x%16==7)
str[30-j]='7';
else if(x%16==8)
str[30-j]='8';
else if(x%16==9)
str[30-j]='9';
else if(x%16==10)
str[30-j]='A';
else if(x%16==11)
str[30-j]='B';
else if(x%16==12)
str[30-j]='C';
else if(x%16==13)
str[30-j]='D';
else if(x%16==14)
str[30-j]='E';
else str[30-j]='F';
x=x/16;
}
printf("The Hexadecimal for %d is: ",d);
k=0;
for(j=0;j<32;j++)
{
if(str[j]!='0') k=1;
if(k==1)
printf("%c",str[j]);
}
printf("\nDo you want to continue? Enter 'y' to continue, others to quit.\n");
fflush(stdin); //清掉記憶體中的所有資料,以免下個動作被自動執行為「否」。
ch=getche();
printf("\n");
}while(ch=='y');
return 0;
} |