zoukankan      html  css  js  c++  java
  • P2084 进制转换

    题目背景

    题目描述

    今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 :

    1*2^4+0*2^3+1*2^2+0*2^1+1*2^0,

    那么请你编程实现,将一个M进制的数N转换成十进制表示的式子。

    注意:当系数为0时,该单项式要省略。

    输入输出格式

    输入格式:

    两个数,M和N,中间用空格隔开。

    输出格式:

    共一行,一个十进制表示的式子。

    输入输出样例

    输入样例#1: 复制
    2 10101
    输出样例#1: 复制
    1*2^4+1*2^2+1*2^0

    说明

    对于100%的数据,1<M<10,N的位数不超过1000。

    我没看到M<10,所以一不小心把任意进制转换的都写出来了(除了1)

    代码如下:

    #include<iostream>
    #include<string>
    using namespace std;
    char *p = "*^+";
    int ch(char n)
    {
     if (n >= '0'&&n <= '9')return n - '0';
     else return n - 'A' + 10;
    }
    int main()
    {
     int num;
     string nn;
     cin >> num >> nn;

     int len = nn.length();
     int p = len - 1;
     cout << ch(nn[0]) << "*" << num <<"^"<<p;
     p--;
     for (int i = 1; i < len; i++)
     {
      if (!ch(nn[i]) == 0)
      {
       cout << "+";
       cout << ch(nn[i]) << "*" << num << "^" << p;
      }
      p--;
     }
     cout << endl;
     return 0;
    }

    刚刚,开始是有错误的,比如输入 2  1000

    则输出  1*2^3+     则不需要后面的加号的。

    因为我写的是只要不是最后一个数和非0,就在后面加+

    后来,改变了判断条件变成了     1.第一个数字一定为非0,2.判断非0前面一定有“+”号

    我cpy了一下,大佬的代码,结果发现比我复杂。

  • 相关阅读:
    (原创)如何利用UDP协议封装一个数据包
    <acarousel> 轮播图片无法触屏滑动
    Groovy开发语言
    关于ViewStub标签
    关键字transient和Volatile
    Android中Activity启动模式
    Android 开源项目分类汇总
    AtomicInteger的并发处理
    Cygwin: died waiting for dll loading (转载)
    Android知识点(C2DM)
  • 原文地址:https://www.cnblogs.com/damaoranran/p/8982015.html
Copyright © 2011-2022 走看看