hdu3925 A至少加上多少包含B(java)

本文介绍了一种使用枚举法解决字符串匹配问题的方法,通过遍历字符串a的每一位并与字符串B进行比较来确定最小的修改代价。利用Java中的BigInteger类处理大整数运算,确保在大数情况下仍能准确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从a的最低位开始枚举和B比较。

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

public class Main
{
    public static void main(String[] args)
    {
        Scanner cin = new Scanner(System.in);
        BigInteger zero = BigInteger.valueOf(0);
        BigInteger ten = BigInteger.valueOf(10);
        int i, j, ncase;
        BigInteger a, b, min;
        ncase = cin.nextInt();
        for(j=1;j<=ncase;j++)
        {
            min = new BigInteger("99999999999999999999999999");
            a = cin.nextBigInteger();
            b = cin.nextBigInteger();
            if (a.toString().indexOf(b.toString()) != -1)//a包含b
            {
                min = zero;
            }
            else
            {
                BigInteger tmp1, tmp2;
                for (i = b.toString().length(); i <= 105; i++)
                {
                    tmp1 = a.mod(ten.pow(i));//a的后几位
                    if(tmp1.compareTo(b)==0) 后几位和b相等
                    {
                        min=zero;
                        break;
                    }
                    else if(tmp1.compareTo(b)==-1)//小于b
                    {
                        tmp2 = b.subtract(tmp1);
                        if(tmp2.compareTo(min)==-1)
                        {
                            min=tmp2;
                        }
                    }
                    else //大于b,在b的前面加1
                    {
                        tmp2 = b.add(ten.pow(b.toString().length()));
                        tmp2 = tmp2.subtract(tmp1);
                        if (tmp2.compareTo(min) == -1&& tmp2.compareTo(zero) != -1)
                        {
                            min = tmp2;
                        }
                    }
                    b = b.multiply(ten);//b乘以10
                }
                
            }
            System.out.println("Case #" + j +": " + min);
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值