首页 > 试题广场 >

字符串相乘

[编程题]字符串相乘
  • 热度指数:5308 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定两个数字(0-9)字符串(长度不限)求它们的乘积。

输入描述:
第一行为第一个数字字符串

第二行为第二个数字字符串


输出描述:
乘积字符串
示例1

输入

123
20

输出

2460
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        BigInteger bi1 = new BigInteger(scanner.next());
        BigInteger bi2 = new BigInteger(scanner.next());
        System.out.println(bi1.multiply(bi2));
    }
}
发表于 2019-07-08 11:13:43 回复(0)

import java.util.Scanner; /**  * 给定两个数字(0-9)字符串(长度不限)求它们的乘积。  */ public class Test6 {     public static int multiplier(int num1,int num2){         int result=num1*num2;         return result;     }     public static void main(String[] args) {         System.out.print("请输入第一个数字字符串:");         Scanner scanner1=new Scanner(System.in);         String str1=scanner1.nextLine();         System.out.print("请输入第二个数字字符串:");         Scanner scanner2=new Scanner(System.in);         String str2=scanner2.nextLine();         int num1=Integer.parseInt(str1);         int num2=Integer.parseInt(str2);         System.out.println("结果为: "+multiplier(num1,num2));     } }

 

 


发表于 2019-03-05 16:06:28 回复(1)
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
        //获得两个字符串
        Scanner scanner = new Scanner(System.in);
        String strNum1 = scanner.nextLine();
        String strNum2 = scanner.nextLine();    
        
        StringBuilder sb = new StringBuilder();

        int len1 = strNum1.length()-1;
        int len2 = strNum2.length()-1;
        
        int index1 = 0;
        int index2 = 0;
       
        //去除字符串头部的0
        while(true){
            if(strNum1.charAt(index1)!='0')
                break;
            index1++;
        }
        while(true){
            if(strNum2.charAt(index2)!='0')
                break;
            index2++;
        }
        //记录字符串后面的0
        while(true){
            if(strNum1.charAt(len1)!='0')
                break;
            len1--;
            sb.append('0');
        }
        while(true){
            if(strNum2.charAt(len2)!='0')
                break;
            len2--;
            sb.append('0');
        }

        strNum1 = strNum1.substring(index1,len1+1);
        strNum2 = strNum2.substring(index2,len2+1);
        len1 = len1 - index1;
        len2 = len2 - index2;
        
        String str1 = strxchar(strNum2,strNum1.charAt(len1));
        String str2;
        for(int i=len1-1;i>=0;i--){
            str2 = strxchar(strNum2,strNum1.charAt(i));
            for(int j=0;j<=len1-1-i;j++)
                str2+='0';
            str1 = AddtwoStr(str2,str1);
            
        }
        System.out.println(str1+sb.toString());
    }
   
    //字符串和一个字符的积
    public static String strxchar(String str,char c){
        
        int num1 = c-48;
        int carryNum = 0;
        StringBuilder sb = new StringBuilder();
        
        for(int i=str.length()-1;i>=0;i--){
            int num = num1*(str.charAt(i)-48)+carryNum;
            int num2 = num%10;
            sb.append(num2);
            carryNum = num/10;
        }
        if(carryNum>0)
            sb.append(carryNum);
        return sb.reverse().toString();
    }

    //两个数字字符串相加
    public static String AddtwoStr(String str1,String str2){

        StringBuilder sb = new StringBuilder();
        int len1 = str1.length()-1;
        int len2 = str2.length()-1;
        int carryNum = 0;
        while(len1>=0&&len2>=0){
            int num = (str1.charAt(len1)-48)+(str2.charAt(len2)-48)+carryNum;
            int num1 = num%10;
            sb.append(num1);
            carryNum = num/10;
            len1--;
            len2--;
        }
        while(len1>=0){
            int num = (str1.charAt(len1)-48)+carryNum;
            int num1 = num%10;
            sb.append(num1);
            carryNum = num/10;
            len1--;
        }
        while(len2>=0){
            int num = (str2.charAt(len2)-48)+carryNum;
            int num1 = num%10;
            sb.append(num1);
            carryNum = num/10;
            len2--;
        }
        if(carryNum>0)
            sb.append(carryNum);
        return sb.reverse().toString();
    }
}
编辑于 2019-02-24 23:44:39 回复(3)