C#用数据结构里的栈原理来实现十进制转换为二进制,求全部代码?
C#用数据结构里的栈原理来实现十进制转换为二进制,求全部代码? --------------------编程问答-------------------- 十进制转二进制: 用2辗转相除至结果为1 将余数和最后的1从下向上倒序写 就是结果 例如302 302/2 = 151 余0 151/2 = 75 余1 75/2 = 37 余1 37/2 = 18 余1 18/2 = 9 余0 9/2 = 4 余1 4/2 = 2 余0 2/2 = 1 余0 1/2 = 0 余1 故二进制为100101110 --------------------编程问答--------------------#include<stdio.h>--------------------编程问答-------------------- 十进制转二进制:
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define max 100000
typedef struct
{
int num[max];
int top;
}SeqStack;
void InitStack(SeqStack *p);
void Print();
void Choose(int choice);
void Turn1();
void Turn2();
void Turn3();
void ChangeNum(int first,int second,char num[]);
void PrintNum(int second,int sum);
void Reverse(char num[]);
int ChangeChar(char x);
void Push(SeqStack *p,int x);
void Pop(SeqStack *p);
int main(void)
{
Print();
while(true)
{
printf("按enter键继续...");
getchar();
getchar();
system("cls");
Print();
}
return 0;
}
void InitStack(SeqStack *p)
{
p->top=-1;
}
void Print()
{
int choice;
printf("Made By 杨梅树的盔甲~O(∩_∩)O~\n");
printf("---------------------\n");
printf("使用说明:本程序的操作对象为2-36进制中的任意进制数.\n");
printf(" 10以后的数字用英文字母代替(大小写均可).\n");
printf("---------------------\n");
printf("1.将一个十进制数转化为二进制数.\n");
printf("2.将一个十进制数转化为任意进制数.\n");
printf("3.将一个任意进制数转话为任意进制数.\n");
printf("4.按其它任意键退出.\n");
printf("---------------------\n");
printf("请选择你要的操作:");
scanf("%d",&choice);
Choose(choice);
}
void Choose(int choice)
{
switch(choice)
{
case 1:
Turn1();
break;
case 2:
Turn2();
break;
case 3:
Turn3();
break;
default:
exit(0);
}
}
void Turn1()
{
int first=10;
int second=2;
char num[max];
printf("请输入一个十进制数:\n");
scanf("%s",num);
ChangeNum(first,second,num);
}
void Turn2()
{
int first=10;
int second;
char num[max];
printf("请输入要转化的进制:");
scanf("%d",&second);
printf("请输入一个十进制数:\n");
scanf("%s",num);
ChangeNum(first,second,num);
}
void Turn3()
{
int first;
int second;
char num[max];
printf("请分别输入被转化和要转化的进制:");
scanf("%d%d",&first,&second);
printf("请输入一个%d进制数:\n",first);
scanf("%s",num);
ChangeNum(first,second,num);
}
void ChangeNum(int first,int second,char num[])
{
int i;
int length;
int sum=0;
Reverse(num);
length=strlen(num);
for(i=0;i<length;i++)
{
sum+=ChangeChar(num[i])*pow(1.0*first,1.0*i);
}
if(sum==0)
{
printf("转化为%d进制的数为:\n",second);
printf("0\n");
}
else
{
PrintNum(second,sum);
}
}
void Reverse(char num[])
{
int i;
int j;
int length;
char temp;
length=strlen(num);
for(i=0,j=length-1;i<j;i++,j--)
{
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
int ChangeChar(char x)
{
int num;
if(x>='A'&&x<='Z')
{
num=x-55;
return num;
}
else if(x>='a'&&x<='z')
{
num=x-87;
return num;
}
else if(x>='0'&&x<='9')
{
num=x-48;
return num;
}
}
void PrintNum(int second,int sum)
{
SeqStack S;
SeqStack *p;
p=&S;
InitStack(p);
while(sum>=1)
{
Push(p,sum%second);
sum/=second;
}
printf("转化为%d进制的数为:\n",second);
while(S.top!=-1)
{
if(S.num[S.top]<=9)
{
printf("%d",S.num[S.top]);
}
else
{
printf("%c",S.num[S.top]+55);
}
Pop(p);
}
printf("\n");
}
void Push(SeqStack *p,int x)
{
if(p->top==max-1)
{
printf("Error:栈已满!\n");
getchar();
getchar();
exit(0);
}
p->top++;
p->num[p->top]=x;
}
void Pop(SeqStack *p)
{
p->top--;
}
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写 就是结果
例如302
302/2 = 151 余0
151/2 = 75 余1
75/2 = 37 余1
37/2 = 18 余1
18/2 = 9 余0
9/2 = 4 余1
4/2 = 2 余0
2/2 = 1 余0
1/2 = 0 余1
故二进制为100101110 --------------------编程问答-------------------- 二楼的,我想用c#也你搞错了吧
补充:.NET技术 , C#