对两个N进制字符串求和

// nSystemStrSum.cpp : 定义控制台应用程序的入口点。
//
/*
N 进制的
两个字符串求和
字符串由0-9 a-z 组成
思路:
若输入不合法,输出提示退出,否则按如下步骤进行
1把两个字符串转成等成长,在短的那个串前加‘0’
2将串中的每一个字符转成数值
3从后到前 每一位临时变量= 串一的位+串二对应的位 +进位
此位上的数值 = 每一位临时变量%进制
        进位   = 每一位临时变量/进制
将数据转成字符  即systemValueStr[此位上的数值];
*/
#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
string systemValueStr = "0123456789abcdefghigklmnopkrstuvwxyz";
bool isLeal(string inputStr,int systemValue)//有效性     判断进制和输入的字符串是否在此进制范围内
{
    if (systemValue<2 || systemValue >35)
        return false;
    for (int i = 0; i < inputStr.length(); i++)
    {
        if (systemValue <= 10)
        {
            if (inputStr[i] - systemValueStr[0]<0 || (inputStr[i] - systemValueStr[systemValue]>0))
                return false;
            else if (!((inputStr[i] - ‘0‘ >= 0 && inputStr[i] - ‘0‘ <= 9) || ((inputStr[i] - ‘a‘ >= 0 && inputStr[i] - ‘a‘ + 10 <= systemValue-1))))
                return false;
        }
    }
}
int getIntFromString(char c,int systemValue){//将字符转成数值0~  进制-1
    if (c >= ‘0‘&&c <= ‘9‘)
        return c - ‘0‘;
    else
        return c - ‘a‘ + 10;
}
string addTwoStrOfNSystem(string inputStr1, string inputStr2, int systemValue){//求和
    string result = "";
    int len = max(inputStr1.length(), inputStr2.length());
    if (inputStr1.length() < inputStr2.length()){//补齐位数
        for (int i = inputStr1.length(); i < inputStr2.length(); i++)
        {
            inputStr1 = ‘0‘ + inputStr1;
        }
    }
    else if (inputStr1.length() >inputStr2.length())
    {
        for (int i = inputStr2.length(); i < inputStr1.length(); i++)
        {
            inputStr2 = ‘0‘ + inputStr2;
        }
    }
    int currentValue;
    int addNext = 0;
    for (int i = len - 1; i >= 0; i--)
    {
        int temp = getIntFromString(inputStr1[i], systemValue) + getIntFromString(inputStr2[i], systemValue) +addNext;
        currentValue = temp%systemValue;
        addNext = temp / systemValue;
        result = systemValueStr[currentValue] + result;

    }
    if (addNext > 0)
        result = systemValueStr[addNext] + result;
    return result;
}
void addTwoStr(){
    int system;//进制
    string inputStr1;
    string inputStr2;
    cout << "please into system" << endl;
    cin >> system;
    cout << "please input str1" << endl;
    cin>>inputStr1;
    cout << "please input str2" << endl;
    cin >> inputStr2;
    if (isLeal(inputStr1, system) && isLeal(inputStr2, system)){
        cout << addTwoStrOfNSystem(inputStr1, inputStr2, system) << endl;;
    }
    else
        cout << "please input right system and strs" << endl;

}

int _tmain(int argc, _TCHAR* argv[])
{
    addTwoStr();
    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/perfection2901/p/10562261.html

时间: 2024-10-31 20:51:06

对两个N进制字符串求和的相关文章

Java 将字节转化为16进制字符串

很多时候我们需要将字节数组转化为16进制字符串来保存,例如做I/O字节流操作的时候,尤其在很多加密的场景中应用都比较广泛. Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte 转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 从上面可以看出

Java中byte与16进制字符串的互相转换

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可

如何将 16进制字符串形式的图片显示到页面上

前言:如果数据库中存放的图片信息不是图片的链接,而是存放图片的16进制字符串(这种存放方式很low,很影响数据库查询效率,还是存放图片链接好).这时如果想要将图片显示在jsp页面上,java代码应该怎么处理了? 例如:(图片和它的16进制编码) 处理步骤: 1.后台代码剪辑 import cn.com.syan.spark.app.sdk.connect.utils.http.BASE64Encoder; //处理代码 BASE64Encoder encoder = new BASE64Enco

Java字节数组和16进制字符串的互相转化

背景基础知识: 1.字符编码的相关知识(转自http://blog.csdn.net/llwan/article/details/7567906) 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不可模糊.我们知道,计算机把任何东西都用数字来表示,"字符"也不例外.比如我们要显示一个阿拉伯数字"3",在我们的PC里,其实并不是仅仅用一

16进制字符串转换为NSData,然后转换为NSString---用于安全支付环境

16进制字符串转换为NSData,然后转换为NSString---用于安全支付环境 +(NSData *)hexToByteToNSData:(NSString *)str { int j=0; Byte bytes[[str length]/2]; for(int i=0;i<[str length];i++) { int int_ch; ///两位16进制数转化后的10进制数 unichar hex_char1 = [str characterAtIndex:i]; ////两位16进制数中

加密解密基础问题:字节数组和(16进制)字符串的相互转换(转)

在加密时,一般加密算法和hash算法,它们操作的都是字节数组,对字节数组按照加密算法进行各种变换,运算,得到的结果也是字节数组.而我们一般是要求对字符串进行加密,所以就涉及到字符串String到 byte[] 的转换,这个很简单.同时在解密时,也涉及到字节数组byte[] 到 String 的转换.另外在对用户的密码进行hash加密之后,最终是要保存在数据库中,所以加密得到 byte[] 也要转换到 String. 1. String 到 byte[] 的转换很简单,因为String类有直接的函

Java中byte与16进制字符串的互相转换(转)

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可

C# 校验并转换 16 进制字符串到字节数组

问题 最近在进行硬件上位机开发的时候,经常会遇到将 16 进制字符串转换为 byte[] 的情况,除了这种需求以外,还需要判定一个字符串是否是有效的 16 进制数据. 解决 字符串转 byte[] 的情况可以使用 Convert.ToByte(string) 来解决,16 进制数据的判定则可以结合正则和长度来进行处理. 在这里我是只接受以下两种形式的 16 进制字符串,并对其进行验证和转换. AA 12 34 56 78 06 AA-12-34-56-78-06 下面就是代码: public s

C#字符串和16进制字符串之间的转换

将字符串编码成 16进制 字符串表示: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { // 将字符串转换成16进制表示: // 先将字符串转换成 byte 数组: // (1).如果是