题目

题目链接:

ZOJ1217 Numerically Speaking https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364771

测试样例

输入样例

29697684282993
transcendental
28011622636823854456520
computationally
zzzzzzzzzzzzzzzzzzzz
*

输出样例

elementary            29,697,684,282,993
transcendental        51,346,529,199,396,181,750
prestidigitation      28,011,622,636,823,854,456,520
computationally       232,049,592,627,851,629,097
zzzzzzzzzzzzzzzzzzzz  20,725,274,851,017,785,518,433,805,270

提交结果截图

带详细注释的源代码

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;inline string convert(string str);
inline string change_num(string num);
template <typename T>
inline T contrast(T s);int main()
{string tmp, num, str;while (cin >> tmp){if (tmp[0] == '*')break;if ('0' <= tmp[0] && tmp[0] <= '9'){num = tmp;str = convert(num);}else{str = tmp;num = convert(str);}num = change_num(num);cout << str;for (int i = 0; i < 22 - str.length(); i++)cout << " ";cout << num << endl;}return 0;
}template <typename T>
inline T contrast(T s)
{T res;//s是数字if ('0' <= s && s <= '0' + 26)res = s - '0' + 'a' - 1;else//是字符res = s - 'a' + '1';return res;
}//数字转字符,字符转数字(进制转换)
inline string convert(string str)
{string res;vector<long long>quotient;//保存商for (int i = 0; i < str.length(); i++)quotient.push_back(str[i]);if ('0' <= str[0] && str[0] <= '9')//是数字{int flag1 = true;int remainder = 0, point_remainder = 0;while (1){int flag = true;for (int i = 0; i < quotient.size(); i++)if (quotient[i] != '0')flag = false;if (flag)break;//取模操作point_remainder = 0;for (int i = 0; i < quotient.size(); i++){//printf("B, quotient[%d] = %lld\n", i, quotient[i]);//cout << "point_remainder = " << point_remainder << endl;quotient[i] = quotient[i] + 10 * point_remainder - '0';//加上上一位的余数乘以10//printf("A, quotient[%d] = %lld\n", i, quotient[i]);point_remainder = quotient[i] % 26;quotient[i] = quotient[i] / 26 + '0';}if (flag1 && !point_remainder)point_remainder += 26;flag1 = false;remainder = point_remainder + '0';//得到最终余数//printf("remainder = %d\n", remainder - '0');char bit = contrast(remainder);res = res + bit;//cout << "num,  res = " << res << endl;//printf("bit = %d\n", bit - 'a');}reverse(res.begin(), res.end());//翻转字符串return res;}else{int remainder = 0, point_remainder = 0;while (1){int flag = true;for (int i = 0; i < quotient.size(); i++)if (quotient[i] != ('a' - 1))flag = false;if (flag)break;//取模操作point_remainder = 0;for (int i = 0; i < quotient.size(); i++){//printf("B, quotient[%d] = %lld\n", i, quotient[i]);//cout << "point_remainder = " << point_remainder << endl;quotient[i] = quotient[i] + 26 * point_remainder - ('a' - 1);//加上上一位的余数乘以26//printf("A, quotient[%d] = %lld\n", i, quotient[i]);point_remainder = quotient[i] % 10;quotient[i] = quotient[i] / 10 + ('a' - 1);}remainder = point_remainder + ('a' - 1);//得到最终余数//printf("remainder = %d\n", remainder - ('a' - 1));char bit = contrast(remainder);res = res + bit;//cout << "str,  res = " << res << endl;//printf("bit = %d\n", bit - '0');}reverse(res.begin(), res.end());//翻转字符串return res;}return res;
}//加逗号
inline string change_num(string num)
{string res;while (num[0] == '0')num = num.substr(1, num.length());//cout << "num = " << num << ", num.length() = " << num.length()<<endl;for (int i = 0; i < num.size(); i++){res += num[i];if (((i + 1) % 3 == (num.size()) % 3) && i != num.size() - 1)res += ',';}return res;
}

ZOJ1217 Numerically Speaking (进制转换,大整数除法,字符串处理,较难而且坑)相关推荐

  1. poj2305-Basic remains(进制转换 + 大整数取模)

    进制转换 + 大整数取模 一,题意: 在b进制下,求p%m,再装换成b进制输出. 其中p为b进制大数1000位以内,m为b进制数9位以内 二,思路: 1,以字符串的形式输入p,m; 2,转换:字符串- ...

  2. C语言:进制转换(整数、字符串)

    本文重点:常见的整型.字符串进制转换(略有不同) 参考书籍:<算法笔记> 1.int型进制转换 1.1.P进制数x转换为十进制数y 实现代码如下: #include <cstdio& ...

  3. C语言取字节的第n二进制,学C语言的看过来,最完整进制转换、整数和小数内存存储模型...

    什么是进制 进制也就是进位计数制,是人为定义的带进位的计数方法.对于任何一种进制---N进制,就表示每一位置上的数运算时都是逢N进一位. 数数相信大家都会了,比如0 1 2 3 4 5 6 7 8 9 ...

  4. C语言32位正整数作为id进程,SOJ4453 Excel列数 进制转换

    描述 我们都知道Excel的列数是用字母表示的,比如第1列对应A,第27列对应AA. 假设给定一个正整数n,你能给出它所对应的字母表示么? 输入格式 程序需要读入多个测试样例,每个测试样例中: 一个正 ...

  5. PAT (Advanced Level) 1015 Reversible Primes(进制转换)

    题目链接:点击查看 题目大意:现在给出定义"翻转素数":在10进制下是素数,并且在D进制下翻转后回到十进制,还是素数,现在给出一个十进制的数num和进制radix,判断是否属于翻转 ...

  6. 16进制-2进制-10进制转换包(终端交互专用)

    因业务需要,与终端机器进行交互.特此写了个2进制10进制16进制字符串之间的转换包. package com.tools;import nettyServer.nServerAccept; impor ...

  7. 计算机进制转进制,计算机中进制及进制转换

    <计算机中进制及进制转换>由会员分享,可在线阅读,更多相关<计算机中进制及进制转换(55页珍藏版)>请在人人文库网上搜索. 1.计算机中进制及进制转换 计算机中进制及进制转换 ...

  8. Java 数据转换/进制转换 工具类

    public class ByteUtil {/*** 十六进制转为十进制*/public static String getHexToTen(String hex) {return String.v ...

  9. [E进位制] lc168. Excel表列名称(进位制+进制转换)

    文章目录 1. 题目来源 2. 题目解析 1. 题目来源 链接:168. Excel表列名称 相关:[E进位制] lc171. Excel表列序号(进位制+进制转换) 互为逆运算,但本题更加难一些. ...

最新文章

  1. 中国铁建内网漫游沦陷多个重要部门泄漏大量信息(redis+ssh-keygen免认证登录案例)...
  2. 查询到330TSI 精英版变速箱是DSG七速湿式(DQ380)(国五)DSG七速湿式(DQ381)(国六)...
  3. 数据库主键设计之思考(转)
  4. 工业以太网交换机故障的排障步骤
  5. 老陈学 C++ 序列之二: 友元函数
  6. linux给文件加可执行权限
  7. Android 获取静态上下文(Application)
  8. c语言字符合法,C语言字符数据的合法形式
  9. 个人经历 | 聊聊我的安全成长之路
  10. 三年云转型,近200%的高增速,神州数码做对了什么?
  11. 随意创作立秋logo图
  12. [UWP开发] Facebook SDK使用(一) —— 配置SDK及Facebook登陆
  13. python搭建网盘网站_搭建nextcloud私有云存储网盘
  14. pixel2真机调试aosp
  15. Laravel 留言评论功能
  16. 【读书笔记】两个天才 发挥孩子的创造力 4岁以上 蒲蒲兰绘本
  17. [ 笔记 ] 操作系统复习笔记
  18. DrawerLayoutMenu使用详解
  19. SAP 采购订单入库——移动类型
  20. hibernate创建配置遇到问题:!-- https://mvnrepository.com/artifact/javassist/javassist -- dependency

热门文章

  1. 微信网页版传输助手上线
  2. 钉钉内网穿透工具,如何使用钉钉小程序访问内网
  3. 贾树森_(第一章)手机摄影拍摄详解_(第一课)手机摄影四个真相
  4. Python 花瓣网动态爬虫
  5. Keras进行人民币面额识别(二)
  6. 图像处理-机器学习一些科普材料汇集 - 持续更新中_拔剑-浆糊的传说_新浪博客...
  7. 【安卓-tio】安卓集成t-io
  8. 阵列天线的赋形波束综合(一)
  9. 未来已来|数字化转型 颠覆传统制造业
  10. Java基础 - 集合框架(5) : Map集合、Collections