codeforces 977AWrong Subtraction

977A
Wrong Subtraction
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Little girl Tanya is learning how to decrease a number by one, but she does it wrong with a number consisting of two or more digits. Tanya subtracts one from a number by the following algorithm:
if the last digit of the number is non-zero, she decreases the number by one;
• if the last digit of the number is zero, she divides the number by 10 (i.e. removes the last digit).

You are given an integer number nn. Tanya will subtract one from it kk times. Your task is to print the result after all kk subtractions.
It is guaranteed that the result will be positive integer number.
Input
The first line of the input contains two integer numbers nn and kk (2≤n≤1092≤n≤109, 1≤k≤501≤k≤50) — the number from which Tanya will subtract and the number of subtractions correspondingly.
Output
Print one integer number — the result of the decreasing nn by one kk times.
It is guaranteed that the result will be positive integer number.
Examples
input
Copy
512 4
output
Copy
50
input
Copy
1000000000 9
output
Copy
1
Note
The first example corresponds to the following sequence: 512→511→510→51→50512→511→510→51→50.
题目解释:
个位若为非零数字,则每次减1;个位数字为零,则除10.
错误程序:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    
  int n,k;
  cin>>n>>k;
  int gewei=n%10;
  while(k--){
    
    
     while(gewei--&&k--)//这种的递减顺序不明确,最好不要使用
     {
    
    
       n--;
     }
     n/=10;
     gewei=n%10;
  }
  cout<<n<<endl;
  //system("pause");
    return 0;
}

错误原因:第一层循环是必须的,第二层循环明显增加了该程序的时间复杂度,若有一个特别大的数,那么该程序的时间复杂度将会大大提高。所以就会出现test1超时现象。
标准程序:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    
  int n,k;
  cin>>n>>k;
  while(k--){
    
    
      if(n%10==0)  n/=10;
      else n--;
  }
  cout<<n<<endl;
  //system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46006714/article/details/109701231