免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 861 | 回复: 2
打印 上一主题 下一主题

就想问问这个题目的思想 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-22 00:20 |只看该作者 |倒序浏览
1:输入一个int的数 先把他转成二进制 再用程序转换成十进制,十六进制
不是用
scanf(" %d ", &a);
prinf(" 你的十进制是%d ", a);
2:打个空心菱形;
3、输入一个不超过80个字母的字符串,统计其中各个字符的出现次数。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-08-23 11:38 |只看该作者

就想问问这个题目的思想

1,实在搞不懂什么叫进制转换,怎么最近老有人在问?
2,这个……唔……确实比较难。不知道想要打多大的?
3,这个嘛…………好像也比较难。看看书应该就会了吧?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-08-23 12:29 |只看该作者

就想问问这个题目的思想

书上的作业吧?建议自己多写多改多练习,不行了在看看近似的源码。不要上来就看别人的源码。看会了和自己写出来是两回事。2、3比较简单。1稍难点,给你一个10进制和64进制转换的源码,呵呵,也是我们老师前几天培训的作业哦。你看看,模仿写出你题目的答案。



  1. #include <stdio.h>;
  2. #include <string.h>;
  3. #include "myassert.h"

  4. void myTurn1(char *,char *);
  5. void myTurn2(char,char *);
  6. char * IntToStr64(char *,int);
  7. int Str64ToInt(int *u,char *str);

  8. int main(int argc,char *argv[]){
  9.         int     i,d;
  10.         char    string[10]={0},
  11.                 *p;
  12.         for ( i = 0; i<70; i++) {
  13.                 if ( i%5 == 0 )
  14.                         printf("\n");
  15.                 d = i;
  16.                 p = IntToStr64(string,d);
  17.                 printf("%d:%s\t",d,string);

  18.                 d = Str64ToInt(&d,string);
  19.                 printf("%s:%d\t",string,d);
  20.         }

  21.         printf("\n");
  22.         d = 2147483647;
  23.         p = IntToStr64(string,d);
  24.         printf("%d:%s\t",d,string);
  25.         d = Str64ToInt(&d,string);
  26.         printf("%s:%d\t",string,d);

  27.         d =-1 ;
  28.         p = IntToStr64(string,d);
  29.         printf("%d:%s\t",d,string);
  30.         d = Str64ToInt(&d,string);
  31.         printf("%s:%d\t",string,d);

  32.         p = IntToStr64(string,2147483648ull);
  33.         printf("%lld:%s\t",2147483648ull,string);
  34.         d = Str64ToInt(&d,string);
  35.         printf("%s:%d\t",string,d);

  36.         printf("\n");
  37.         return 0;
  38. }

  39. char * IntToStr64(char *str,int u) {
  40.         int i;
  41.         int j;
  42.         char num[7];

  43.         ASSERT(u>;=0);

  44.         i = 0;
  45.         while (u>;=64){
  46.                 num[i] = u%64;
  47.                 u/=64;
  48.                 i++;
  49.         }
  50.         num[i] = u;

  51.         j = 0;
  52.         while ( i>;=0 ) {
  53.                 myTurn1(&num[i],&str[j]);
  54.                 i--;
  55.                 j++;
  56.         }

  57.         return str;
  58. }

  59. void myTurn1(char *a,char *b)
  60. {
  61.         char    c1 = *a,
  62.                 c2 = *b;

  63.         ASSERT( c1<64 && c1>;=0 );


  64.         if (c1<=9)
  65.                 c2 = c1+48;
  66.         else if (c1<=35)
  67.                 c2 = c1+55;
  68.         else if (c1<=61)
  69.                 c2 = c1+61;
  70.         else if (c1==62)
  71.                 c2 = '#';
  72.         else
  73.                 c2 = '-';

  74.         *b = c2;
  75. }

  76. int Str64ToInt(int *u,char *str){
  77.         char    num[7] = {0},
  78.                 *p = str;
  79.         int     i,
  80.                 sum=0,last=1;

  81.         ASSERT(strlen(str)<=6);

  82.         if (strlen(str)==6)

  83.                 ASSERT(str[0] == '0' || str[0] == '1');


  84.         i = 0;
  85.         while ( *p != '\0' ) {
  86.                 myTurn2(*p,&num[i]);
  87.                 i++;
  88.                 p++;
  89.         }

  90.         i--;
  91.         while ( i>;=0 ) {
  92.                 sum += num[i]*last;
  93.                 last *= 64;
  94.                 i--;
  95.         }

  96.         *u = sum;

  97.         return sum;
  98. }

  99. void myTurn2(char ch,char *p) {
  100.         char    c1;

  101.         ASSERT( (ch=='-') || (ch=='#') || ( (ch>;='a') && (ch<='z') ) || ( (ch>;='A') && (ch<='Z') ) || ( (ch>;='0') && (ch<='9') ) );

  102.         if (ch == '-')
  103.                 c1 = 63;
  104.         else if (ch == '#')
  105.                 c1 = 62;
  106.         else if (ch>;='a')
  107.                 c1 = ch - 61;
  108.         else if (ch>;='A')
  109.                 c1 = ch - 55;
  110.         else
  111.                 c1 = ch - 48;

  112.         *p = c1;

  113. }

复制代码


呵呵,这个是主要的程序。改的不成样子了,assert函数是自己实现的,在另外的文件里,功能和系统带的assert函数一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP