当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,