用友筆試編程題

用友筆試——編程題

第一題

第一題SQL題

題面

多表查詢題目。

給出用戶、訂單、商品、店鋪四張表。關係爲:

店鋪,商品(1:n)

店鋪,訂單(1:n)

商品,訂單(1:n)

用戶,訂單(1:n)

查詢結果爲:訂單編號(code),訂單商品總價格(訂單數量*商品價格),還有一個不記得了可能是用戶姓名,查詢條件爲訂單商品總價格>100,最後的結果按照訂單商品總價格降序排序。

select 訂單.code,商品.price*訂單.number,用戶.name
from 訂單,用戶,商品
where 商品.price*訂單.number>100 and 訂單.usrid=用戶.id and 訂單.goodid=good.id
order by 商品.price*訂單.number desc;

第二題

題面

給出字符串,用逗號分隔兩個數字。求兩個數字的乘積。不能直接轉化爲數字求乘積。

分析

題面很簡單,這是一個字符串模擬大數乘法,應該是大數處理。

沒有模板,敲的太慢,導致沒能提交。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        // 讀入數據,轉成int數組
        Scanner in = new Scanner(System.in);
        String s =  in.nextLine();
        String[] nums = s.split(",");
        String num1 = nums[0];
        String num2 = nums[1];
        int len1 = num1.length();
        int len2 = num2.length();
        int[] result = new int[len1+len2];
        int[] array1 = new int[len1];
        int[] array2 = new int[len2];
        for(int i=0;i<len1;i++){
            array1[i] = num1.charAt(i) - '0';
        }
        // carry 進位數,index 輔助數,j第一個操作數的下標
        int carry = 0;
        int index;
        int j;
        for(int i=len2-1;i>=0;i--){
            array2[i] = num2.charAt(i) - '0';
            for(j=len1-1;j>=0;j--){
                // 計算保存到結果數組的下標
                index = len2-1-i+(len1-1-j);
                // 輔助數,臨時保存carry
                int temp = carry;
                // 計算carry
                carry = (result[index]+carry+array1[j]*array2[i])/10;
                carry = carry>0?carry:0;
                // 計算兩個數的乘積,不包括進位
                result[index] = (result[index]+temp+array1[j]*array2[i])%10;
            }
            // 如果最後還有進位,也要處理,同時把carry置零,因爲不存在進位了
            if(carry!=0) {
                result[len2 - 1 - i + (len1 - 1 - j)] = carry;
                carry = 0;
            }
        }
        // 逆序輸出,去掉前導零
        boolean zero = true;
        for (int i=result.length-1;i>=0;i--){
            if(zero && result[i]==0)
                continue;
            if(zero)
                zero = false;
            System.out.print(result[i]);
        }


    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章