洛谷 CF39H 题解

自闭症网瘾萝莉.ら 提交于 2019-11-28 07:36:44

这道题,无非就是普通的进制问题,好简单哦~~ 

函数:


int itoa(int s)
{
        int r=0,k=0;//k表示位数-1
        while(s>=1)//用数学方法转换进制
        {
             r+=s%n*pow(10,k);//省略数组
             s/=n;//更新一次s
             k++;//进一位
       }
       return r;为后续代码做铺垫!!!
}
### 然后,只需排版即可!
for(int i=1;i<=n-1;i++)
     for(int j=1;j<=n-1;j++)
     {
           cout<<itoa(i*j);
            if(j==n-1) cout<<endl;//判断是否为最后的数
           else if(j==1&&itoa((j+1)*i)<10)cout<<"  ";//判断每行第一个数是否为两位数
           else if(itoa(i*j)<10&&itoa((j+1)*i)<10) cout<<"  ";//判断下一个数是否为两位数
           else cout<<" ";//情况都不满足,打一空格
     }
# 上完整代码! ! !
#include<bits/stdc++.h>
using namespace std;
short n;
int itoa(int s)
{
 int r=0,k=0,x[2];
 while(s>=1)
 {
  r+=s%n*pow(10,k);
  s/=n;
  k++;
 }
 return r;
}
int main()
{
    cin>>n;
    if(n==10)//特判10进制,免得TLE!!!
        for(int i=1;i<=n-1;i++)
         for(int j=1;j<=n-1;j++)
         {
          cout<<i*j;
          if(j==n-1) cout<<endl;
          else if(j==1&&(j+1)*i<10) cout<<"  ";
          else if(i*j<10&&(j+1)*i<10) cout<<"  ";
          else cout<<" ";
   }   
    else
        for(int i=1;i<=n-1;i++)
         for(int j=1;j<=n-1;j++)
         {
          cout<<itoa(i*j);
          if(j==n-1) cout<<endl;
          else if(j==1&&itoa((j+1)*i)<10) cout<<"  ";
          else if(itoa(i*j)<10&&itoa((j+1)*i)<10) cout<<"  ";
          else cout<<" ";
      }     
 return 0;
}
数据很小,应该只有9个测试点!
# 怎么样,是不是很简单?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!