1 条题解

  • 0
    @ 2022-6-17 16:32:53

    C :

    #include<stdio.h>
    #include<string.h>
    
    
    int main()
    {
       int n,p,sum=0; 
       unsigned int i=0,j,k=0,l=0;
       char m[30],a[2],b[2],res[1000],ch;
       memset(res,0,sizeof(res));
       scanf("%s",m);
       for(i=strlen(m)-1;i>=0;i--)
       {
           if(m[i]!='>')
    	   {
    		   a[k]=m[i];
    		   k++;
    	   }
    	   else
    		   break;
       }
       a[k]='\0';
       if(k==1)
    	   p=a[0]-'0';
       else
    	   p=a[0]-'0'+(a[1]-'0')*10;
       for(i=strlen(m)-2-k;i>=0;i--)
       {
           
           if(m[i]!='<')
    	   {
    		   b[l]=m[i];
    		   l++;
    	   }
    	   else
    		   break; 
       }
       b[l]='\0';
       if(l==1)
    	   n=b[0]-'0';
       else
    	   n=b[0]-'0'+(b[1]-'0')*10;
       m[strlen(m)-k-l-2]='\0';
       for(i=0;i<strlen(m);i++)
       {
           sum=sum*n+m[i]-'0';
       }
       while(sum)
       {
       
    	   res[i]=sum%p+'0';
    	   sum/=p;
    	   i++;
       }
       res[i]='\0';
       for(j=0,--i;j<i;i--,j++)
       {
         ch=res[j];
    	 res[j]=res[i];
    	 res[i]=ch;
       }
       if(strlen(m)==0)
    	   strcmp(res,"0");
       printf("%s<%d>=%s<%d>",m,n,res,p);
       return 0;
    }
    

    C++ :

    #include <iostream>
    #include <string.h>
    #include <stack>
    #include <queue>
    using namespace std;
    int main()
    {
    	char T[30];
    	cin>>T;
    	queue <int> Q;
    	int ans=0,n=0,p=0;
    	stack <int> S;
    	int len=strlen(T);
    	int i=0;
    	while(T[i]>='0'&&T[i]<='9')
    			Q.push(T[i++]-'0');
    	i++;
    	while(T[i]>='0'&&T[i]<='9')
    			n=n*10+T[i++]-'0';
    	i++;
    	while(T[i]>='0'&&T[i]<='9'&&i<len)
    			p=p*10+T[i++]-'0';
    	while(!Q.empty())
    	{
    		ans=ans*n+Q.front();
    		cout<<Q.front();
    		Q.pop();
    	}
    	while(ans)
    	{
    		S.push(ans%p);
    		ans/=p;
    	}
    	cout<<"<"<<n<<">=";
    	while(!S.empty())
    	{
    		cout<<S.top();
    		S.pop();
    	}
    	cout<<"<"<<p<<">"<<endl;
    	return 0;
    }
    

    Pascal :

    var s,strm,strm1,strn:string;x,y,i,j:longint;n,m,m1,w:int64;
        z:array[1..10000]of integer;
    begin
      readln(s);
      x:=pos('<',s);
      for i:=1 to x-1 do strn:=strn+s[i];
      y:=pos('>',s);
      for i:=x+1 to y-1 do strm:=strm+s[i];
      val(strm,m);
      for i:=y+1 to length(s) do strm1:=strm1+s[i];
      val(strm1,m1);
      w:=1;
      for i:=length(strn) downto 1 do
        begin
          n:=n+(ord(strn[i])-48)*w;
          w:=w*m;
        end;
      i:=0;
      repeat
        i:=i+1;
        z[i]:=n mod m1;
        n:=n div m1;
      until n=0;
      write(strn,'<',strm,'>=');
      for j:=i downto 1 do write(z[j]);
      writeln('<',m1,'>');
    end.
    

    Java :

    import java.math.BigDecimal;
    import java.util.Scanner;
    
    public class Main {
    	public static String str;
    	public static int n, m;
     
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		str = sc.next();
    		int ids = str.indexOf("<");
    		String tmp = str.substring(ids);
    		char[] tm = tmp.toCharArray();
    		String num = "";
     
    		for (int i = 0; i < tm.length; i++) {
    			if (tm[i] >= '0' && tm[i] <= '9') {
    				num += tm[i];
    			}
    			if (tm[i] == '>') {
    				n = Integer.parseInt(num);
    				num = "";
    			}
    		}
    		m = Integer.parseInt(num);
    		// System.out.println(n + " " + m);
    		// 左边的数字
    		str = str.substring(0, ids);
    		BigDecimal result = new BigDecimal("0");
    		// n进制底数
    		BigDecimal ndis = new BigDecimal("" + n);
    		// 假如进制不是10进制,则转化为十进制
    		if (n != 10) {
    			char[] nums = str.toCharArray();
    			for (int i = nums.length - 1; i >= 0; i--) {
    				result = result.add(new BigDecimal(nums[i] + "").multiply(ndis
    						.pow(nums.length - 1 - i)));
    				// System.out.println(result + " ");
    				// result += Math.pow(n, nums.length - 1 - i);
    			}
    		} else { // 进制是10进制
    			result = new BigDecimal(str);
    		}
    		// 转化为m进制
    		if (n == m) {
    			System.out
    					.println(result + "<" + n + ">=" + result + "<" + m + ">");
    		} else {
    			long yus;
    			String mizji = "";
    			// m进制底数
    			BigDecimal mdis = new BigDecimal("" + m);
    			while (result.compareTo(new BigDecimal("0")) > 0) {
    				mizji = result.remainder(mdis) + mizji;
    				result = result.divide(mdis, BigDecimal.ROUND_DOWN);
    			}
    			System.out.println(str + "<" + n + ">=" + mizji + "<" + m + ">");
    		}
     
    	}
    }
    
    
    • 1

    信息

    ID
    2980
    时间
    1000ms
    内存
    125MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者